数据结构栈和队列的应用

  1. 栈在括号匹配中的应用
  2. 栈在表达式求值中的应用
  3. 栈在递归中的应用
  4. 队列的应用

栈在括号匹配中的应用

最后出现的左括号最先被匹配(LIFO)
【用栈的特性实现】
1:压入左括号,遇到右括号将栈中的左括号弹出
对括号进行配对检查。
2:无论是栈中括号不足,还是栈中剩余括号,都表明匹配失败。
匹配失败的情况:左括号单/右括号单/左右括号不匹配
请添加图片描述

请添加图片描述

栈在表达式求值的应用

考点如下:
1:三种算术表达式:中缀/后缀/前缀
2:后缀表达式相关考点:中缀表达式转后缀表达式/后缀表达式求值
3:前缀表达式相关考点:中缀表达式转前缀表达式/前缀表达式求值

算术表达式

由三个部分组成:操作数、运算符、界限符【必不可少,反映了运算先后次序】

  1. 逆波兰式(后缀表达式):运算符在两个操作数后面
    实现思路:遇到操作数就入栈,遇到运算符就出栈两个数据,后出的元素位于运算符的左边,先出的位于运算符的右边,进行运算,将运算后的结果再压入栈中,重复该过程直到表达式全部输入。
    就得到了中缀表达式转后缀表达式
    【中缀转后缀:遵循左优先的原则】

2:中缀转化成前缀【遵循右优先的原则】
实现思路:就是上方思路从右侧进行一样的操作。

【机算算法实现】——【中缀转后缀】+【后缀表达式求值】请添加图片描述

请添加图片描述

栈在递归中的应用

函数调用的特点:最后被调用的函数是最先执行结束的(LIFO)
请添加图片描述

请添加图片描述

请添加图片描述
联系编译原理所学的内容

例子:
适合用递归算法解决,可以把原始问题转换为属性相同,但规模较小的问题
请添加图片描述
请添加图片描述
缺点:递归层数太多可能会导致栈溢出
递归层数太多,时间复杂度也会升高
引入:递归算法和非递归算法的区别?
答:递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

请添加图片描述
请添加图片描述
缺点:递归可能包含多次重复运算

队列的应用

【树的层次遍历】
【图的广度优先遍历】
【多个进程争抢着使用有限的系统资源时,FCFS是一种常用的策略】

队列在计算机系统中的应用

1:解决主机与外部设备之间速度不匹配的问题
【打印机和主机之间速度不匹配】
【主机输出数据给打印机打印,输出数据的速度比打印数据的速度要快得多,由于速度不匹配,若直接把输出的数据送给打印机打印是显然不行的。】
【解决方案:设置一个打印数据缓冲区,主机要把打印的数据依次写入这个缓冲区,写满后就暂停输出,转去做其他的事情,打印机就从缓冲区中按照先进先出的原则依次取出数据并打印,打印完后再向主机发送请求,主机接收到请求后再次向缓冲区中打印数据,保证了打印数据的正确又提高了效率】
【打印数据缓冲区所存储的数据就是一个队列】
2:解决由多用户引起的资源竞争问题
【cpu的资源竞争】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值