返回

栈与队列的妙用:用两个栈轻松实现队列

前端

在计算机科学中,队列和栈都是常用的数据结构,它们拥有不同的特点和应用场景。队列是一种遵循先进先出(FIFO)原则的数据结构,这意味着先加入队列的元素将首先被移除。而栈则遵循先进后出(LIFO)原则,意味着最后加入栈中的元素将首先被移除。

本文将介绍如何使用两个栈来实现一个队列。首先,我们需要定义一个新的类,我们称之为MyQueue。这个类将包含两个栈,一个作为输入栈,另一个作为输出栈。当我们想在队列中添加一个元素时,我们将把它推入输入栈。当我们想从队列中移除一个元素时,我们将从输出栈中弹出它。

如果输出栈为空,我们将把所有元素从输入栈弹出到输出栈中。这样,输出栈中的元素就始终是队列中的第一个元素。

下面是使用Python实现的MyQueue类的代码:

class MyQueue:

    def __init__(self):
        self.input_stack = []
        self.output_stack = []

    def push(self, x):
        self.input_stack.append(x)

    def pop(self):
        if not self.output_stack:
            while self.input_stack:
                self.output_stack.append(self.input_stack.pop())
        return self.output_stack.pop()

    def peek(self):
        if not self.output_stack:
            while self.input_stack:
                self.output_stack.append(self.input_stack.pop())
        return self.output_stack[-1]

    def empty(self):
        return not self.input_stack and not self.output_stack

我们可以使用以下代码来测试MyQueue类:

queue = MyQueue()
queue.push(1)
queue.push(2)
queue.push(3)
print(queue.peek())  # 1
print(queue.pop())  # 1
print(queue.empty())  # False

输出结果为:

1
1
False

使用两个栈来实现队列是一个经典的算法问题。它可以帮助我们理解队列和栈的基本原理,以及如何使用它们来解决实际问题。