问题分析:栈的特点是先进后出。要能够取出当前的最小值,需要用另一个栈保存当前的最小值,所以可采用“双栈”的结构,一个栈保存所有的值,另一个栈保存当前的最小值。
方法:
template <class Type> class min_stack{
private:
stack<Type> s1;
stack<Type> s2;
public:
min_stack(){}
~min_stack(){}
Type min(){
if (!s2.empty()){
return s2.top();
}
}
void push(Type a){
s1.push(a);
if (s2.empty() || a <= s2.top()){
s2.push(a);
}
}
Type pop(){
if (!s1.empty() && !s2.empty()){// 非空
if (s1.top() == s2.top()){
s2.pop();
}
return s1.pop();
}
}
};