C++ 最小栈的实现

最小栈的实现

如何实现一个最小栈,使得需要输出最小值时,我能直接获取。

难点:由于栈是不提供迭代器,所以无法遍历栈中的数据从而得出最小值。

思路:其实可以创建一个另外的栈,称为最小栈,记录原本数据中最小值的状态,有以下两种情况当进入的数据不小于最小值时,最小栈中还是再存放入最小值,当进入的数据小于最小值时,最小栈存放入该数据,并且将其赋值给min。当pop数据时,同时也pop最小栈的数据,当获取最小值时,直接输出最小栈的栈顶top()来直接获取。

过程图示:
在这里插入图片描述
代码如下:

#include <stdio.h>
#include <stack>

class MinStack {
public:
    MinStack() {
    }
    void push(int x) {
    	_data.push(x);
    	if (_min.empty()){
	    	_min.push(x);
	    }
	    else{
	    	if (x > _min.top()){
	    		x = _min.top();
	    	}
    		_min.push(x);
    	}
    }
    void pop() {
    	_data.pop();
    	_min.pop();
    }
    int top() {
        return _data.top();
    }
    int getMin() {
        return _min.top();
    }
private:
	std::stack<int> _data;
	std::stack<int> _min;
};

致谢

本章知识点和思路由小象学院相关视频提供,由本人学习并梳理得出,希望自己加深记忆的同时,也能给大家提供更多有关于算法的知识点,谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值