两个队列实现一个栈

1.栈

栈是后进先出

                                                 

2.队列

我们现在想用两个队列来第一个输出4怎么办,大家很容易就想到按照下图的方法把队列中的123移到另一个队列,然后第一个队列只剩一个值4,pop这个值就行了。

当最后一个4pop后,你会发现此时队列1又为空了。所以编程的时候要注意

  • 无论是push前后,还是pop前后,其中一个队列一定是空的就像上图。
  • push的时候往非空的队列push
  • pop的时候将非空的队列poll到空队列,剩下一个直接pop。(两个队列pop的时候轮流为空)

3.代码


public class QueueStack {
    private Queue<Integer> q1 ;
    private Queue<Integer> q2 ;

    public QueueStack() {
        this.q1 = new LinkedList();
        this.q2 = new LinkedList();
    }

    public void offer(int val){
        if(!q1.isEmpty())q1.offer(val);
        else q2.offer(val);
    }

    public int pop(){
        int val=0;
        if(q1.isEmpty()&&q2.isEmpty())throw new RuntimeException("栈为空");
        if(!q1.isEmpty()){
            while(q1.size()>1)q2.offer(q1.poll());
            val = q1.poll();//此时q2poll的是最后一个元素
        } else{
            while(q2.size()>1)q1.offer(q2.poll());
            val=q2.poll();//此时q1poll的是最后一个元素
        }
        return val;
    }

    public static void main(String[] args) {
        QueueStack s = new QueueStack();
        for (int i = 0; i < 5; i++) {
            s.offer(i);
        }
        for (int i = 0; i < 5; i++) {
            System.out.print(s.pop());//43210
        }
        System.out.println(s.pop());//java.lang.RuntimeException: 栈为空
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值