551 字
3 分钟
代码随想录算法训练营第九天 | 栈与队列 Part01

栈与队列基础#

  • 栈(Stack)和队列(Queue)是两种重要的数据结构,广泛应用于算法和数据处理。
  • 栈是后进先出(LIFO)的数据结构,队列是先进先出(FIFO)的数据结构。
  • 栈的基本操作包括入栈(push)、出栈(pop)和查看栈顶元素(top)。
  • 队列的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(front)。

栈与队列的经典应用场景:#

  • 栈:函数递归、括号匹配、字符串去重等;
  • 队列:按顺序处理任务、窗口滑动、图的广度优先遍历;
  • 同时掌握“栈模拟队列”、“队列模拟栈”等面试高频技巧。

232. 用栈实现队列#

LeetCode 232. 用栈实现队列

class MyQueue:
def __init__(self):
self.stack1 = [] # 负责入队
self.stack2 = [] # 负责出队
def push(self, x: int) -> None:
self.stack1.append(x)
def pop(self) -> int:
if self.empty():
return None
if self.stack2:
return self.stack2.pop()
else:
# 只有在 stack2 为空时,才将 stack1 所有元素倒入 stack2
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
def peek(self) -> int:
# 先执行出队操作但不真正移除,再将值放回 stack2 中
res = self.pop()
self.stack2.append(res)
return res
def empty(self) -> bool:
return not (self.stack1 or self.stack2)

225. 用队列实现栈#

LeetCode 225. 用队列实现栈

from collections import deque
class MyStack:
def __init__(self):
self.q1 = deque() # 主队列
self.q2 = deque() # 辅助队列
def push(self, x: int) -> None:
self.q1.append(x)
def pop(self) -> int:
# 将 q1 中前 n-1 个元素转移到 q2,保留最后一个
while len(self.q1) > 1:
self.q2.append(self.q1.popleft())
res = self.q1.popleft()
# 交换 q1 和 q2 的角色
self.q1, self.q2 = self.q2, self.q1
return res
def top(self) -> int:
res = self.pop()
self.q1.append(res)
return res
def empty(self) -> bool:
return len(self.q1) == 0

20. 有效的括号#

LeetCode 20. 有效的括号

class Solution:
def isValid(self, s: str) -> bool:
stack = []
for char in s:
if char in "({[":
stack.append(char)
elif stack:
top = stack.pop()
if char == ')' and top != '(':
return False
if char == '}' and top != '{':
return False
if char == ']' and top != '[':
return False
else:
# 栈为空但遇到右括号,说明无效
return False
return len(stack) == 0

1047. 删除字符串中的所有相邻重复项#

LeetCode 1047. 删除字符串中的所有相邻重复项

class Solution:
def removeDuplicates(self, s: str) -> str:
stack = []
for char in s:
if not stack:
stack.append(char)
else:
top = stack.pop()
if char != top:
stack.append(top)
stack.append(char)
return ''.join(stack)
代码随想录算法训练营第九天 | 栈与队列 Part01
https://fuwari.vercel.app/posts/code_musings_day_nine/
作者
Jarrett
发布于
2025-06-20
许可协议
CC BY-NC-SA 4.0