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

现在有一个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();
    }
}

猜你喜欢

转载自www.cnblogs.com/Aug-20/p/11774469.html