题目:实现一个特殊的栈,在栈的基本功能上,实现返回栈中最小值的操作。
思路:使用两个栈,stackData存放当前栈中元素,功能与普通栈没有区别。stackMin存放每一步的最小值,若当前压栈的数据小于等于stackMin的栈顶元素,就将这个数据入栈到stackMin中。
class myStack
{
public:
myStack();
virtual ~myStack();
void push(int num); //入栈
void pop();
int getMin(); //获取栈中最小元素
private:
std::stack<int> stackData;
std::stack<int> stackMin;
};
//出栈
void myStack::push(int num){
stackData.push(num);
if(stackMin.empty() || stackMin.top() >= num){
stackMin.push(num);
}
}
//入栈
void myStack::pop(){
if(stackData.top() == stackMin.top()){
stackMin.pop();
}
stackData.pop();
}
//获取栈中最小元素
int myStack::getMin(){
if(stackMin.empty()){
std::cerr<<"the stack is empty"<<std::endl;
return 0;
}
return stackMin.top();
}