/*
用两个队列实现一个栈
栈:先进后出
队列:先进先出
入栈:将元素进队列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 测试成功
}
用两个队列实现一个栈
最新推荐文章于 2024-04-29 17:26:49 发布