返回

LeetCode,日拱一卒,月满则盈

前端

导读

LeetCode 是一个专注于算法和数据结构的在线学习平台。它为用户提供了一个交互式学习环境,并提供了大量高质量的算法和数据结构问题。用户可以在 LeetCode 上练习解决问题,并与其他用户分享解题思路。

LeetCode 每日一题是 LeetCode 推出的一项活动,每天都会提供一个新的算法或数据结构问题供用户解决。用户可以根据自己的时间和能力选择是否参与。LeetCode 每日一题不仅可以帮助用户巩固所学的知识,还可以帮助用户发现自己算法和数据结构的薄弱之处,以便于进一步提高。

正文

在本文中,我们将介绍如何仅使用两个栈实现先入先出队列。队列是一种数据结构,它遵循先进先出的原则,即最早进入队列的元素也是最早离开队列的元素。队列通常使用数组或链表来实现。

栈是一种数据结构,它遵循后进先出的原则,即最后进入栈的元素也是最早离开栈的元素。栈通常使用数组或链表来实现。

使用两个栈实现队列并不难。我们可以使用一个栈作为输入栈,另一个栈作为输出栈。当我们向队列添加元素时,我们将元素压入输入栈。当我们从队列中删除元素时,我们将输入栈中的元素依次弹出并压入输出栈。然后,我们将输出栈中的元素依次弹出并返回给用户。

代码实现

class Queue:

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

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

    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


if __name__ == "__main__":
    queue = Queue()

    queue.push(1)
    queue.push(2)
    queue.push(3)

    print(queue.pop())  # 1
    print(queue.pop())  # 2
    print(queue.pop())  # 3

    print(queue.empty())  # True

总结

在本文中,我们介绍了如何仅使用两个栈实现先入先出队列。这种实现方法简单易懂,并且可以在任何支持栈的数据结构的编程语言中实现。希望本文对您有所帮助。