实现一个栈Stack,Push、Pop、Min(返回最小值的操作)的时间复杂度为O(1)

来源:互联网 发布:linux 新建文件 编辑:程序博客网 时间:2024/05/29 13:53

【思路】

可以用两个栈来实现,s1为存储栈,s2为辅助栈。

       入栈时,往s1里入栈,然后若s2为空,则s2也入栈,若s2不为空,则将s1里的栈顶与入栈的数字比较,若栈顶小,则s2不入栈,否则,s2,入栈。

       出栈时,s1栈顶和s2栈顶比较,若相等,则s1和s2都出栈,否则,只是s1出栈。

【代码如下】

template <class T>class Stack{public:void Push(T data){_s1.push(data);if (!_s2.empty()){if (_s1.top() < _s2.top()){_s2.push(data);}}else_s2.push(data);}void Pop(){if (_s1.empty()){return;}if (!_s2.empty() && (_s1.top() == _s2.top())){_s2.pop();}_s1.pop();}T Min(){if (!_s2.empty()){return _s2.top();}}private:stack<T> _s1;stack<T> _s2;};

结果:


阅读全文
0 0