栈和队列的运用

栈和队列的应用详解

栈的应用

栈是一种后进先出(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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值