定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
#include <iostream> #include <stack> using namespace std; template<class T> class MinStack { private: stack<T> stackA; stack<T> stackB; public: void push(T t); void pop(); T min(); } template <class T> inline void MinStack<T>::push(T t) { stackA.push(t); if(stackB.empty()) { stackB.push(t); } else { T t0 = stackB.top(); if(t <=to) stackB.push(t); } };
template<class T> inline void MinStack<T>::pop() { if(stackA.empty()) return ; else { T t0 = stackA.top(); stackA.pop(); T t1 = stackB.top(); if(t1<=t0) { stackB.pop(); } } };
template<class T> inline T MinStack<T>::min() { if(stackA.empty()) exit(-1); else { return stackB.top(); } };