栈:先进后出
队列:先进先出
1:两个队列实现栈:
队列A
队列B
入栈:入队列A, 1,2,3,4 入栈,在队列A里为 A: 1,2,3,4
出栈,将队列A中的元素入队列B直到队列A里的元素只剩下一个,则队A为4,队B为1,2,3,A:4,B:1,2,3,输出A队头4
#include <queue>
#include <iostream>
using namespace std;
queue<int> A,B;
void PushStack(int value)//向非空的那个队列入队
{
if (!A.empty()==true&&B.empty()==true)
{
A.push(value);
}
else if (!B.empty()==true&&A.empty()==true)
{
B.push(value);
}
else //A B均为空
{
A.push(value);
}
}
int PopStack()//由非空的队列向空队列入队,知道剩下最后一个元素
{
int m = 0;
if (!A.empty()==true&&B.empty()==true)
{
while(A.size()!=1)
{
B.push(A.front());
A.pop();
}
m = A.front();
A.pop();
return m;
}
else if (!B.empty()==true&&A.empty()==true)
{
while(B.size()!=1)
{
A.push(B.front());
B.pop();
}
m = B.front();
B.pop();
return m;
}
return 0;
}
int main()
{
for (int i = 1; i < 5; i++)
{
PushStack(i);
}
cout<<PopStack()<<endl;
PushStack(10);
PushStack(12);
for (int i = 1; i < 4; i++)
{
cout<<PopStack()<<endl;
}
system("pause");
}
2:两个栈实现队列
A:入栈队
B:出栈队
由于栈为先进后出,两个栈正好满足先进先出
入队:
入栈A,A:1,2,3,4
出队:将栈A的元素入栈B,直到为空,B:4,3,2,1;出栈1
#include<iostream>
#include<stack>
using namespace std;
stack<int> A,B;
void PushQueue(int value)
{
A.push(value);
}
int PopQueue()
{
int m;
while (!A.empty())
{
B.push(A.top());
A.pop();
}
if (!B.empty())
{
m = B.top();
B.pop();
}
else m = 0;
while(!B.empty())
{
A.push(B.top());
B.pop();
}
return m;
}
int main()
{
int m ;
for (int i = 1; i < 6; i++)
{
PushQueue(i);
}
for (int i = 1; i < 4; i++)
{
int m1 = PopQueue();
cout<<m1<<endl;
}
PushQueue(7);
PushQueue(8);
while(m = PopQueue())cout<<m<<endl;
system("pause");
return 0;
}