实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最 小值的操作)的时间复杂度为O(1)

 主要思路:

1)建立两个栈_data与_mindata,其中_data作为数据栈,存放每一个入栈的数据;_mindata作为数据最小栈,存放数据栈中当前最小的数据;

2)当元素data入栈时,将data入栈到_data数据栈中,并让data与_data的栈顶元素做比较,如果x小于等于_data的栈顶元素,则将data入栈到_mindata最小数据栈中;

3)当元素出栈时,让_data与_mindata的栈顶元素做比较,如果栈顶元素相等,则将_data与_mindata的栈顶元素同时出栈,否则只让_data数据栈的栈顶元素出栈;

4)当求栈中最小元素时,直接让最小元素栈的栈顶元素出栈。

#include <iostream>
#include <stack>
using namespace std;

template <class T>
class retmin
{
public:
	void pushmin(const T& data)
	{
		_data.push(data);
		if (!_mindata.empty())
		{
			T tmp = _mindata.top();
			if (data < tmp)
			{
				_mindata.push(data);
			}
			else
				_mindata.push(tmp);
		}	
		else
			_mindata.push(data);
	}
	void popmin()
	{
		if (_data.empty())
		{
			return;
		}
		if (!_data.empty() && _data.top() =&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值