用队列实现栈

本文所解决的问题是如何用队列来实现栈

       我们采用双队列的思想,这两个队列地位是一致的,当栈非空时,一定是一个队列为空,另一个队列非空。当进行入栈操作时,我们找到非空队列,在该队列添加元素;当进行出栈操作时,我们同样找到非空队列,将该非空队列除队尾元素外的其余元素添加到另一队列,然后让队尾元素出队。

class MyStack {
    Queue<Integer>queue1;
    Queue<Integer>queue2;

    /** Initialize your data structure here. */
    public MyStack() {
         queue1=new LinkedList<>();
         queue2=new LinkedList<>();
    }

    /** 入栈操作 */
    public void push(int x) {
        Queue<Integer>queue=queue1.isEmpty()?queue2:queue1;
        queue.add(x);
    }

    /** 出栈操作 */
    public int pop() {
        if(queue1.isEmpty()&&queue2.isEmpty()){
            throw  new RuntimeException("栈空");
        }
        Queue<Integer>queue_pop=queue1.isEmpty()?queue2:queue1;
        Queue<Integer>queue_store=queue1.isEmpty()?queue1:queue2;
        while (queue_pop.size()!=1){
            queue_store.add(queue_pop.poll());
        }
        return queue_pop.poll();
    }

    /** 返回栈顶元素 */
    public int top() {
        if(queue1.isEmpty()&&queue2.isEmpty()){
            throw  new RuntimeException("栈空");
        }
        Queue<Integer>queue_pop=queue1.isEmpty()?queue2:queue1;
        Queue<Integer>queue_store=queue1.isEmpty()?queue1:queue2;
        while (queue_pop.size()!=1){
            queue_store.add(queue_pop.poll());
        }
        int peek=queue_pop.peek();
        queue_store.add(queue_pop.poll());
        return peek;
    }

    /** 判断栈是否为空 */
    public boolean empty() {
         return queue1.isEmpty()&&queue2.isEmpty();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值