~使用两个栈实现一个队列~

栈和队列最常考的面试题之一:  使用两个栈实现一个队列

主要思路:

1)建立两个栈input与output,其中input用于入队列,output用于出队列;

2)当元素要入队列时,直接当元素压入input中;

3)当元素要出队列时,先判断output中是否有元素。若是有,可以直接将output中的栈顶元素出队列;若是没有,则先将input中的元素入到output中,再将output的栈顶元素出队列;

4)判断队列是否为空,依次判断input与output是否为空,若有其中一个栈不为空,则队列就不为空。

 

 废话少说,直接上代码啦!!

#include <stack>

template <class T>
class DoubleStackToQueue
{
public:
	void Push(const T& data)
	{
		input.push(data);
	}

	void Pop()
	{
		if(!output.empty())
		{
			output.pop();
		}
		else
		{
			if(!input.empty())
			{
				while(input.size() - 1)
				{
					output.push(input.top());
					input.pop();
				}

				input.pop();
			}
		}
	}

	bool Empty()
	{
		if(!(input.empty() && output.empty()))
		{
			return false;
		}

		return true;
	}

	T& Front()
	{
		if(!output.empty())
		{
			return output.top();
		}
		
		if(!input.empty())
		{
			while(!input.empty())
			{
				output.push(input.top());
				input.pop();
			}

			return output.top();
		}
	}

	T& Back()
	{
		if(!input.empty())
		{
			return input.top();
		}
		
		if(!output.empty())
		{
			while(!input.empty())
			{
				input.push(output.top());
				output.pop();
			}

			return input.top();
		}
	}

	void Print()
	{
		if(!Empty())
		{
			cout<<Front()<<" ";
			Pop();
		}
	}
protected:
	stack<T> input, output;
};


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值