问题:两个队列实现栈。
因为队列的特点是先进先出,而栈式先进后出。所以具体的实现步骤如下:
(1)判断是否为NULL;如果queue1和queue2都为NULL,则该栈为NULL;(2)如果queue1不为NULL,而queue2为NULL;则queue1出队,进队到queue2,如果queue1的元素个数只剩一个的时候就出队输出,也就是出栈;反之亦然;
(3)若果那个队列不为NULL,则入队那个队列,也即入栈;
示意图如下:
利用容器具体代码实现如下:
#include<iostream>
#include <algorithm>
#include <queue>
using namespace std;
queue<int> q1;
queue<int> q2;
void InStack(int data)
{
if(q1.empty())//刚开始默认从q2入队;
{
q2.push(data);
cout<<"InStack:"<<data<<endl;
}
else
{
q1.push(data);
cout<<"InStack:"<<data<<endl;
}
}
void OutStack()
{
if(q1.empty())
{
while(q2.size()>1)
{
q1.push(q2.front());
q2.pop();
}
cout<<"OutStack:"<<q2.front()<<endl;
q2.pop();
}
else
{
while(q1.size()>1)
{
q2.push(q1.front());
q1.pop();
}
cout<<"OutStack:"<<q1.front()<<endl;
q1.pop();
}
}
bool IsEmpty()
{
if(q1.empty() && q2.empty())
return 1;
else
return 0;
}
int main()
{
int array[]={1,2,3};
for(int i=0;i<3;i++)
{
InStack(array[i]); //全部入栈:1,2,3;
}
for(int i=0;i<3;i++)
{
if(IsEmpty()) //判断是否为NULL;
return NULL;
OutStack(); //全部出栈:3,2,1;
}
system("pause");
return 0;
}
运行结果: