1.3 設計一個有getMin功能的棧

題目:實現一個特殊的棧,在棧的基本功能上,實現返回棧中最小值的操作。

思路:使用兩個棧,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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章