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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值