包含min 函数的栈

/**设计包含min 函数的栈。定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。要求函数min、push 以及pop 的时间复杂度都是O(1)。*/
#include<stack>
using namespace std;

template<typename T>
class StackWithMix
{
private:
	stack<T> data_stack;
	stack<T> min_stack;

public:
	T minvalue(void)
	{
		return min_stack.top();
	}

	void push(T integer);
	T pop(void);
};

template<typename T>
void StackWithMix<T>::push(T integer)
{
	data_stack.push(integer);
	if(integer<min_stack.top() || min_stack.empty())
	{
		min_stack.push(integer);
	}
	else
	{
		min_stack.push(min_stack.top());
	}

}
template<typename T>
T StackWithMix<T>::pop()
{
	assert(!data_stack.empty());
	T ret = data_stack.top();
	data_stack.pop();
	min_stack.pop();
	return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
	StackWithMix<int> stack_with_mix;
	stack_with_mix.push(6);
	stack_with_mix.push(11);
	stack_with_mix.push(3);
	stack_with_mix.push(8);
	stack_with_mix.push(1);
	stack_with_mix.push(19);
	stack_with_mix.pop();
	stack_with_mix.pop();
	printf("%d", stack_with_mix.minvalue());
	system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值