首页 > 其他 > 详细

9(2)、用两个队列实现一个栈

时间:2019-11-01 00:44:44      阅读:117      评论:0      收藏:0      [点我收藏+]

现在有一个A队列和一个B队列。

(1)入栈操作,判断A队列是否有元素,若A队列有元素,则元素直接入A队列;若没有,则将元素入B队列;

(2)出栈操作,若A和B都没有元素,则出栈失败;

  判断A是否有元素,若A有元素,则获取A元素的个数N,将前N-1个元素出队并进入B队列,最后一个元素即为出栈元素;      

  如果A中没有元素,则对B执行上述操作。

第二种解法:

A队列永远作为空队列,B队列存放元素

(1)入栈操作:将元素进入A队列,然后将B中的元素循环出队并进入A队列,将A和B队列引用交换,保证A依然为空队列;

(2)出队操作:从B中弹出元素即可。

class MyStack {
    private Queue<Integer> a;//输入队列
    private Queue<Integer> b;//输出队列
    
    public MyStack() {
        a = new LinkedList<>();
        b = new LinkedList<>();
    }
    
    public void push(int x) {
        a.offer(x);
        // 将b队列中元素全部转给a队列
        while(!b.isEmpty())
            a.offer(b.poll());
        // 交换a和b,使得a队列没有 在push()的时候始终为空队列
        Queue temp = a;
        a = b;
        b = temp;
    }
    
    public int pop() {
        return b.poll();
    }
   
    public int top() {
        return b.peek();
    }
    
    public boolean empty() {
        return b.isEmpty();
    }
}

 

9(2)、用两个队列实现一个栈

原文:https://www.cnblogs.com/Aug-20/p/11774469.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!