队列栈(Queue Stack)

title

队列栈(Queue Stack)是使用两个队列实现的栈结构。在队列栈中,我们使用两个队列来模拟栈的行为。其中,一个队列用于存储栈中的元素,另一个队列用于辅助实现入栈和出栈操作。

在入栈操作时,我们将元素插入到队列中,保证该队列的队首为栈顶元素;在出栈操作时,我们将该队列中除队尾元素外的所有元素依次出队,并插入到辅助队列中,然后将队尾元素出队,即为出栈元素。这样,就实现了使用队列模拟栈的功能。

以下是一个简单的队列栈的实现示例,使用 Java 语言实现:

import java.util.LinkedList;
import java.util.Queue;

public class QueueStack<Item> {
    private Queue<Item> queue1;
    private Queue<Item> queue2;

    public QueueStack() {
        this.queue1 = new LinkedList<>();
        this.queue2 = new LinkedList<>();
    }

    public boolean isEmpty() {
        return queue1.isEmpty();
    }

    public int size() {
        return queue1.size();
    }

    public void push(Item item) {
        queue2.offer(item);
        while (!queue1.isEmpty()) {
            queue2.offer(queue1.poll());
        }
        Queue<Item> temp = queue1;
        queue1 = queue2;
        queue2 = temp;
    }

    public Item pop() {
        if (isEmpty()) {
            throw new RuntimeException("Stack underflow");
        }
        return queue1.poll();
    }

    public Item peek() {
        if (isEmpty()) {
            throw new RuntimeException("Stack underflow");
        }
        return queue1.peek();
    }
}

在上述实现中,我们使用泛型 Item 表示栈中的元素类型。QueueStack 类包含了 isEmpty、size、push、pop 和 peek 五个方法,分别用于判断队列栈是否为空、获取队列栈的大小、入栈、出栈和返回栈顶元素。我们使用两个 LinkedList 实现了两个队列 queue1 和 queue2,并在入栈时实现了栈的操作。其中,我们先将元素插入到 queue2 中,并将 queue1 中的所有元素依次出队,并插入到 queue2 中。然后,我们交换 queue1 和 queue2 的指针,这样 queue1 就成为了存储栈中元素的队列。在出栈和返回栈顶元素时,我们直接访问 queue1 的队首元素即可。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:00

results matching ""

    No results matching ""