题目描述
使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
代码示例
class MyQueue:
def __init__(self):
self.stack1 = [] # 用于入队
self.stack2 = [] # 用于出队和查看队头
def push(self, x: int) -> None:
self.stack1.append(x)
def pop(self) -> int:
# 如果stack2为空,将stack1中的元素逐个出栈并压入stack2
if not self.stack2:
while self.stack1:
self.stack2.append(self.stack1.pop())
# 弹出stack2的栈顶元素
return self.stack2.pop()
def peek(self) -> int:
# 如果stack2为空,将stack1中的元素逐个出栈并压入stack2
if not self.stack2:
while self.stack1:
self.stack2.append(self.stack1.pop())
# 返回stack2的栈顶元素,但不弹出
return self.stack2[-1]
def empty(self) -> bool:
# 队列为空的条件是两个栈都为空
return not self.stack1 and not self.stack2
在面对栈的实现问题时,一开始的想法是利用链表来实现。链表的结构天然适合栈的特性,简单易懂。然而,通过阅读代码随想录后,我意识到其实用数组同样可以很好地实现栈的功能。
数组作为一种基础的数据结构,能够高效地支持栈的操作,而且在一些场景中,使用数组更为方便。这种灵活性和多样性的选择是算法和数据结构学习中的一大乐趣,也让我更深入地理解了不同实现方式的优劣和适用场景。