用两个队列实现一个栈

/*
用两个队列实现一个栈
栈:先进后出 
队列:先进先出 

入栈:将元素进队列A
出栈:判断队列A中元素的个数是否为1,
如果等于1,则出队列,否则将队列A中的元素 
以此出队列并放入队列B,直到队列A中的元素留下一个,
然后队列A出队列,再把 队列B中的元素出队列以此放入队列A中。
*/
#include<iostream>
#include<stack>
#include<queue>
using namespace std;

class Solution
{
	private:
		queue<int> queue1;
		queue<int> queue2;
	public:
		void push(int node)
		{
			queue1.push(node);
		}
		
		int pop()
		{
			int temVal;
			if(queue1.size()==1)
			{
				temVal=queue1.front();//front为队列中第一个元素值 
				queue1.pop();
			}
			else
			{
			   while(queue1.size()!=0)   //在这里有一个问题  就是出栈的那个元素最后被 栈2保留下来了
			   							//用连续的三条出栈语句即可测试出 
			   	 
			   {
			   		temVal=queue1.front();
			   		
			   		
			   		if(queue1.size()!=1)//判断 在这里要出栈的那个元素不能再进队列2 
			   		{
			   		queue2.push(temVal);	
					}
					queue1.pop();
			   }
			}
			
			int x;
			if(queue1.size()==0)//将队列中的值还回去 
			{
				while(queue2.size()!=0)
				{
					x=queue2.front();
					queue1.push(x);
					queue2.pop();
				}
			}
			
			return temVal;
		}	
};
//测试代码 
int main()
{
	Solution sol;
	sol.push(1);
	sol.push(2);
	sol.push(3);
	cout<<sol.pop()<<" "<<endl;
	cout<<sol.pop()<<" "<<endl;
//	cout<<sol.pop()<<" "<<endl;
	
	sol.push(4);
	sol.push(5);
	cout<<sol.pop()<<" "<<endl;
	cout<<sol.pop()<<" "<<endl;
	cout<<sol.pop()<<" "<<endl;
	return 0;
	//return 3 2 5 4 1 测试成功 
	
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值