【试题描述】定义的数据结构,请在类型中实现一个能够得到栈的最小元素的函数。 在该栈中,调用min、push、pop的时间复杂度都是O(1)。
【试题来源】未知
【参考代码】
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
| #include <iostream> #include <stack> using namespace std;
template<typename T> class StackWithMin {
private: stack<T> dataStack; stack<T> minStack;
public: void push(const T &element); T pop(); T min(); };
template<typename T> void StackWithMin<T>::push(const T &element) {
dataStack.push(element);
if(minStack.empty()) { minStack.push(element); } else if(element < minStack.top()) { minStack.push(element); } else { minStack.push(minStack.top()); } }
template<typename T> T StackWithMin<T>::pop() {
if(dataStack.empty()) { throw "Stack is empty."; }
T topValue = dataStack.top(); dataStack.pop(); minStack.pop();
return topValue; }
template<typename T> T StackWithMin<T>::min() {
if(dataStack.empty()) { throw "Stack is empty."; }
return minStack.top(); }
int main() { StackWithMin<int> stackWithMin; stackWithMin.push(3); stackWithMin.push(4); stackWithMin.push(2); stackWithMin.push(6); cout << stackWithMin.min() << endl; stackWithMin.pop(); stackWithMin.pop(); cout << stackWithMin.min() << endl; return 0; }
|