首页 > 其他 > 详细

包含min的栈

时间:2014-03-12 15:25:42      阅读:389      评论:0      收藏:0      [点我收藏+]
/***************************************************************
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素
的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)
***************************************************************/
#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;

template<typename T>
class minStack
{
public:
	void push(const T& data);
	void pop();
	const T& min();
	
private:
	stack<T> m_stackData;
	stack<T> m_stackMin;
};
template<typename T>
void minStack<T>::push(const T& data)
{
	m_stackData.push(data);
	if(m_stackMin.empty())
		m_stackMin.push(data);
	else
	{
		if(data<=m_stackMin.top())
			m_stackMin.push(data);
	}
}
template<typename T>
void minStack<T>::pop()
{
	assert(!m_stackData.empty() && !m_stackMin.empty());
	if(m_stackData.top() == m_stackMin.top())
		m_stackMin.pop();
	m_stackData.pop();
}

template<typename T>
const T& minStack<T>::min()
{
	assert(!m_stackData.empty() && !m_stackMin.empty());
	return m_stackMin.top();
}
void test()
{
	minStack<int> intMinStack;
	intMinStack.push(5);
	printf("%d\n",intMinStack.min());
	intMinStack.push(2);
	printf("%d\n",intMinStack.min());
	intMinStack.push(6);
	printf("%d\n",intMinStack.min());
	intMinStack.push(7);
	printf("%d\n",intMinStack.min());
	intMinStack.push(1);
	printf("%d\n",intMinStack.min());
	intMinStack.push(3);
	printf("%d\n",intMinStack.min());
	intMinStack.pop();
	printf("%d\n",intMinStack.min());
	intMinStack.pop();
	printf("%d\n",intMinStack.min());
	intMinStack.pop();
	printf("%d\n",intMinStack.min());
	intMinStack.pop();
	printf("%d\n",intMinStack.min());
	intMinStack.pop();
	printf("%d\n",intMinStack.min());
	intMinStack.pop();
}
int main()
{
	test();
	return 0;
}
用两个栈来实现包含min函数的栈,一个栈存储数据,另一个存储最小数据集。

包含min的栈,布布扣,bubuko.com

包含min的栈

原文:http://blog.csdn.net/walkerkalr/article/details/21079027

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!