1、两个栈模拟一个队列
栈是LILO,而队列是FIFO,所以可以:
入队,直接进A号栈;
出队,先判断B号栈是否有元素,有元素就直接弹出栈顶即队首,如果B号栈没有元素,则将A号栈的元素顺序弹出并进B号栈。
// 需要用到这两个头文件
#include<stack>
#include <assert.h>
void EnStack(Stack &st_1,int num)
{
//其实,还需要判断栈1是否为满
st_1.push(num);
}
int DeStack(Stack &st_1,Stack st_2,int element)
{
if (st_2.empty())
{
while(!st_1.empty())
{
st_2.push(st_1.top());
st_1.pop();
}
}
assert(st_2.size()>0);
st_2.pop();
}
q1是专职进出栈的,q2只是个中转站
- 入栈:直接入队列q1即可
- 出栈:把q1的除最后一个元素外全部转移到队q2中,然后把刚才剩下q1中的那个元素出队列。之后把q2中的全部元素转移回q1中
void Push(Queue &q1, Queue &q2, int k)
{
q1.push(k);
}
int Pop(Queue &q1, Queue &q2)
{
int tmp;
if(q1.empty())
{
cout<<"栈空!";
exit(0);
}
else
{
while(q1.size() != 1)
q2.push(q1.pop());
tmp = q1.pop();
while(q2.empty() == 0)
q1.push(q2.pop());
return tmp;
}
}</span>
参考:http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html