// // Created by Scheaven on 2020/6/8. // #ifndef _STACK_UTIL_H #define _STACK_UTIL_H #include #include #include #include #include #include #include #include #include #include using namespace std; template class MaxStack { private: stack max_stack; stack _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 class MinStack { private: stack min_stack; stack _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