1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
| //
| // Created by Scheaven on 2020/6/8.
| //
|
| #ifndef _STACK_UTIL_H
| #define _STACK_UTIL_H
|
| #include <algorithm>
| #include <memory.h>
| #include <iostream>
| #include <fstream>
| #include <string>
| #include <iomanip>
| #include <stdlib.h>
| #include <vector>
| #include <stack>
| #include <cstdio>
|
| using namespace std;
|
|
| template <typename T>
| class MaxStack
| {
| private:
| stack<T> max_stack;
| stack<T> _data;
|
| public:
| MaxStack(){};
| ~MaxStack(){};
|
|
| void push(T ele)
| {
| _data.push(ele);
| if(max_stack.empty() || ele>=max_stack.top())
| {
| max_stack.push(ele);
| }
| };
|
| void pop()
| {
| T tem = _data.top();
| _data.pop();
| if(tem==max_stack.top())
| {
| max_stack.pop();
| }
| };
|
| T top()
| {
| return _data.top();
|
| };
|
| bool isEmpty()
| {
| return _data.empty();
| };
|
| T maxItem()
| {
| return max_stack.top();
| };
|
| int size()
| {
| return _data.size();
| };
| };
|
|
| template <typename T>
| class MinStack
| {
| private:
| stack<T> min_stack;
| stack<T> _data;
|
| public:
| MinStack(){};
| ~MinStack(){};
|
| void push(T ele)
| {
| _data.push(ele);
| if(min_stack.empty() || ele<=min_stack.top())
| {
| min_stack.push(ele);
| }
| };
|
| void pop(){
| T tem = _data.top();
| _data.pop();
| if(tem==min_stack.top())
| {
| min_stack.pop();
| }
| };
|
| T top()
| {
| return _data.top();
|
| };
|
| bool isEmpty()
| {
| return _data.empty();
| };
|
| T minItem()
| {
| return min_stack.top();
| };
|
| int size()
| {
| return _data.size();
| };
| };
|
| #endif //INC_05_MAX_STACK_QUEUE_STACK_UTIL_H
|
|