剑指:用两个队列实现栈的先进后出

题目描述

用两个队列来实现一个栈,完成栈的Push和Pop操作。 栈中的元素为int类型。
思路:利用队列的先进先出,犹如一条龙循环穿梭在队列A、B一样,每次新元素进,则进入队列的尾部,具体定义如下:
  • 栈的push操作,首先找到有元素的队列(两队都为空则元素入队列B),将元素入此队
  • 栈的pop操作,将有元素的队列的元素以此出队并以此入另一队,直到最后一个元素,直接将至元素出队实现pop操作
  • 上述两个操作的病原则就是保证将元素全部放在一个队,当需要栈的pop操作时,犹如一条龙循环从当前队列穿梭到另一队列,并去除最尾部的元素,当需要栈的push操作时,将新元素直接添加到龙的尾部
实现:
 void push(int node)
    {
        int size1=queue1.size();
        int size2=queue2.size();
        if(size1) queue1.push(node);
        else queue2.push(node);
    }
    
    int pop()
    {
        int size1=queue1.size();
        int size2=queue2.size();
        if(size1) 
        {
            for(int i=0;i<size1-1;i++)
            {
                queue2.push(queue1.top());
                queue1.pop();
            }
            int rvalue=queue1.top();
            queue1.pop();
            return rvalue;
        }
        else if(size2)
        {
            for(int i=0;i<size2-1;i++)
            {
                queue1.push(queue2.top());
                queue2.pop();
            }
            int rvalue=queue2.top();
            queue2.pop();
            return rvalue;
        }
        return 0;
    } 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值