栈的应用
栈是一种后进先出(LIFO)的数据结构,常用于需要临时存储和回溯的场景。
函数调用栈
程序执行时,函数调用和返回通过栈管理。每次调用函数时,当前上下文(如局部变量、返回地址)压入栈;函数返回时弹出栈顶上下文。
表达式求值
中缀表达式转换为后缀表达式或直接求值时,运算符栈用于暂存运算符。遇到操作数直接输出,运算符根据优先级入栈或出栈。
括号匹配
遍历字符串时,左括号压入栈;遇到右括号时检查栈顶是否匹配。栈为空或不匹配则失败,否则弹出栈顶。
浏览器历史
浏览器的前进后退功能通过双栈实现:一个栈保存已访问页面,另一个栈暂存后退弹出的页面。
队列的应用
队列是一种先进先出(FIFO)的数据结构,适合处理顺序任务和缓冲。
任务调度
操作系统中的进程调度使用队列管理就绪任务。先到达的任务先执行,新任务加入队尾。
消息队列
分布式系统中,消息队列解耦生产者和消费者。消息按顺序入队,消费者从队头获取。
广度优先搜索(BFS)
图的BFS算法中,队列存储待访问节点。从队头取出节点,将其邻接节点加入队尾。
缓冲区管理
数据流处理(如视频播放)时,队列作为缓冲区平衡生产和消费速度,避免数据丢失或卡顿。
代码示例
栈的括号匹配(Python)
def is_valid(s: str) -> bool:
stack = []
mapping = {')': '(', '}': '{', ']': '['}
for char in s:
if char in mapping:
top = stack.pop() if stack else '#'
if mapping[char] != top:
return False
else:
stack.append(char)
return not stack
队列的BFS(Python)
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
while queue:
node = queue.popleft()
if node not in visited:
print(node)
visited.add(node)
queue.extend(graph[node] - visited)

栈和队列的应用详解
1115

被折叠的 条评论
为什么被折叠?



