如何使用两个队列实现一个栈(JAVA)

问题

如何使用两个队列来高效的实现一个栈

解答

假设用来实现栈的两个队列分别为Q1和Q2,只需为栈定义入栈和出栈操作

入栈(push):
在任何一个非空队列中插入元素
检查队列Q1是否非空,如果Q1为空,对Q2执行入队操作
否则对Q1执行入队操作
时间复杂度O(1)

出栈(POP):
将N-1个元素移到另一个队列,删除当前队列中的最后一个元素完成出栈操作
如果队列Q1非空,那么从Q1移n-1个元素到Q2中,然后对Q1中的最后一个元素执行出队操作并返回该元素
如果队列Q2非空,那么从Q2移n-1个元素到Q1中,然后对Q2的最后一个元素执行出队操作并返回该元素
时间复杂度O(N)

代码


/**
 * 用两个队列实现栈
 */
public class StackWithTwoQueue {

    DynArrayQueue queue1;
    DynArrayQueue queue2;

    public StackWithTwoQueue() {
        queue1 = new DynArrayQueue();
        queue2 = new DynArrayQueue();
    }

    public void push(int data) {
        if (queue1.isEmpty()) {
            queue2.enQueue(data);
        } else {
            queue1.enQueue(data);
        }
    }

    public int pop() {
        int i = 0;
        int size = 0;
        if (queue2.isEmpty()) {
            size = queue1.getQueueSize();
            while (i < size - 1) {
                queue2.enQueue(queue1.deQueue());
                i++;
            }
            return queue1.deQueue();
        } else {
            size = queue2.getQueueSize();
            while (i < size - 1) {
                queue1.enQueue(queue2.deQueue());
                i++;
            }
            return queue2.deQueue();
        }
    }

}
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页