用栈实现队列,用队列实现栈 Queue Using Stacks and Stack Using Queues

时间:2022-02-25 17:37:59

栈的结构是先入后出。队列的结构是先入先出。


用两个栈实现一个队列的一种方法:

出队操作:对于栈中的元素,最里面的是最早放进去的。而要出队的就是最早的元素,所以需要把栈里的元素全腾出来放另一个栈中,这样最早的元素就成为另一个栈的最外面的元素,可以直接拿走出队。

入队操作:出队操作使得会使得栈的顺序逆置,因此我要先逆回来,让最早放进去的元素还在最里面。


Stack in;
Stack out;
void enqueue( int value ) {
while( !out.isEmpty() ) {
in.push( out.pop() );
}
in.push( value );
}

int dequeue() {
while( !in.isEmpty() ) {
out.push( in.pop() );
}
return out.pop();
}

这样的操作使得出入栈的代码看起来很对称。其实也可以用不对称操作方法,一样达到实现队列的效果。


用两个队列实现一个栈的一种方法:

出栈操作:从一个队列中把数据一个一个出队放到另一个队去,当发现是最后一个元素了(即最后来的元素),不再让他入队了,直接拿走出栈。

入栈操作:出栈操作使得数据全都到了另一个队去了,我再全部拿会来。然后入队。

queue in;
queue out;
void push(int value)
{
while(!out.isEmpty())
in.enqueue(out.dequeue());
in.enqueue(value);
}

int pop()
{
while(1)
{
value = in.dequeue();
if(in.isEmpty())
return value;
else
out.enqueue(value);
}
}