且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Python编程:用两个栈实现队列

更新时间:2022-09-07 21:06:40

用两个栈实现队列思路:

入队进入一个栈,从另一栈出队

外加一个元素传递的方法,负责将元素从入队栈转移到出队栈

入队栈:1,2,3

出队栈:3,2,1


# 先实现一个栈
class Stack():
    def __init__(self):
        self.stack = []

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

    def pop(self):
        return self.stack.pop()

    def is_empty(self):
        return len(self.stack) == 0


# 使用栈实现队列
class StackQueue():
    def __init__(self):
        self.stack_a = Stack()
        self.stack_b = Stack()

    # 入队操作
    def enqueue(self, item):
        self.stack_a.push(item)

    # 出队操作
    def dequeue(self):
        if self.stack_b.is_empty():
            if self.stack_a.is_empty():
                return None
            self._transfer()
        return self.stack_b.pop()

    # 栈A元素转移到栈B
    def _transfer(self):
        while (not self.stack_a.is_empty()):
            self.stack_b.push(self.stack_a.pop())


if __name__ == '__main__':
    stack_queue = StackQueue()
    stack_queue.enqueue(1)
    stack_queue.enqueue(2)
    stack_queue.enqueue(3)
    stack_queue.enqueue(4)
    print(stack_queue.dequeue())
    print(stack_queue.dequeue())
    stack_queue.enqueue(5)
    stack_queue.enqueue(6)
    print(stack_queue.dequeue())
    print(stack_queue.dequeue())
    print(stack_queue.dequeue())
    print(stack_queue.dequeue())
    print(stack_queue.dequeue())
"""
1
2
3
4
5
6
None
"""

参考

漫画:如何用栈实现队列?