//==============以下为自己实现====================
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <queue>
using namespace std;
queue<int> q1;
queue<int> q2;
void inStack(int data)
{
if(q1.empty())
{
q2.push(data);
printf("inStack %d\n", data);
}
else
{
q1.push(data);
printf("inStack %d\n", data);
}
}
void outStack()
{
if(q1.empty())
{
while(q2.size()>1)
{
q1.push(q2.front());
q2.pop();
}
printf("outStack %d\n", q2.front());
q2.pop();
}
else
{
while(q1.size()>1)
{
q2.push(q1.front());
q1.pop();
}
printf("outStack %d\n", q1.front());
q1.pop();
}
}
bool isEmpty()
{
if(q1.empty() && q2.empty())
{
return true;
}
else
{
return false;
}
}
int main(int argc, char *argv[])
{
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 0;
outStack(); //全部出栈:3,2,1;
}
system("PAUSE");
return 0;
}
//==============以下为转载实现======================
https://blog.csdn.net/gogokongyin/article/details/51505555
问题:两个队列实现栈。
因为队列的特点是先进先出,而栈式先进后出。所以具体的实现步骤如下:
(1)判断是否为NULL;如果queue1和queue2都为NULL,则该栈为NULL;(2)如果queue1不为NULL,而queue2为NULL;则queue1出队,进队到queue2,如果queue1的元素个数只剩一个的时候就出队输出,也就是出栈;反之亦然;
(3)若果那个队列不为NULL,则入队那个队列,也即入栈;
示意图如下:
利用容器具体代码实现如下:
-
-
-
-
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;
-
}