数据结构P2.3:栈和队列的应用

栈的应用

栈在括号匹配中的应用

  • 问题描述:左右括号匹配
  • 算法设计:遇到左括号就进行入栈操作,遇到右括号,就消耗左括号进行弹出栈顶元素操作
  • 匹配失败情况:
 1.左括号无匹配
 2.右括号无匹配
 3.左右括号不匹配

栈在表达式求值中的应用

  • 中缀、前缀、后缀表达式
中缀:a+b
前缀:+ab
后缀:ab+
  • 实现后缀表达式思路:后进先出
1.从左往右扫描下一个元素,直到处理完所有元素
2.若扫描到操作数则压入栈,返回1;否则执行3
3.若扫描到运算符,则弹出两个栈顶元素,执行相应运算,把运算结果压回栈顶。返回1

栈在递归中的应用

  • 递归:函数自己调用自己的过程
  • 递归中函数调用的特点:最后被调用的函数最先执行结束(后进先出LIFO)
  • 适合“递归算法”的问题:把原始问题转换为属性相同,但规模较小的问题:
ex1:计算正整数的阶乘:n*factorial(n-1)
ex2:求斐波那契数列:Fib(n-1)+Fib(n-2)
  • 递归算法解决思路:求出递归表达式,找到边界条件
  • 缺点:太多层递归可能导致栈溢出,空间复杂度高

队列的应用

  • 数的层次遍历:需要队列的帮助
从根结点出发,把每一个父结点的左右子结点放入队列的队尾,弹出队头元素
  • 图的广度优先遍历
  • 队列在操作系统中的应用
操作系统资源分配:FCFS(First Come First Service,先来先服务),可用队列的先进先出(FIFO)结构实现。比如将队头进程分配给CPU
打印数据缓冲区:多人使用一台打印机,系统缓冲区(用“队列”组织打印数据),打印机每次回先打印队头文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kxwang_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值