題目:實現一個特殊的棧,在棧的基本功能上,實現返回棧中最小值的操作。
思路:使用兩個棧,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();
}