【思路】
可以用两个栈来实现,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; };
结果: