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

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


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

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

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


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);
    }
}


你可能感兴趣的:(用栈实现队列,用队列实现栈 Queue Using Stacks and Stack Using Queues)