用两个栈实现队列思路:
入队进入一个栈,从另一栈出队
外加一个元素传递的方法,负责将元素从入队栈转移到出队栈
入队栈: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
"""