代码随想录算法训练营第八天(1)|232.用栈实现队列

38 阅读1分钟

题目描述

使用栈实现队列的下列操作:

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

在面对栈的实现问题时,一开始的想法是利用链表来实现。链表的结构天然适合栈的特性,简单易懂。然而,通过阅读代码随想录后,我意识到其实用数组同样可以很好地实现栈的功能。

数组作为一种基础的数据结构,能够高效地支持栈的操作,而且在一些场景中,使用数组更为方便。这种灵活性和多样性的选择是算法和数据结构学习中的一大乐趣,也让我更深入地理解了不同实现方式的优劣和适用场景。