数据结构之栈的应用

栈的应用

括号匹配问题

在这里插入图片描述
计算机找对应的匹配的括号,一定是先把左括号存入,然后在找到第一个右括号的时候
会取出最后一次的左括号
这不就后进先出吗
所以可以把找到左括号认为是一个入栈操作,找到右括号是一个出栈操作
然后括号匹配就相当于一个栈操作

在这里插入图片描述

几种错误情况
1.扫描左括号和右括号不匹配
在这里插入图片描述

左括号和右括号不匹配,一个是小括号,一个是中括号
后面的就都不用看了
不合法
2.进行出栈操作时候,栈空了
在这里插入图片描述

到对应右中括号的时候,栈中所有的左括号已经取出,没有对应的右括号
与他匹配,后面也就不用看了
不合法

3.进行完所有出栈操作(右括号完),栈中还有元素(左括号)

在这里插入图片描述

算法实现

在这里插入图片描述

小结

在这里插入图片描述

栈在后缀、前缀求值表达式求值中的应用(含说明)

在这里插入图片描述

中值表达式
在这里插入图片描述
界限符:就是我们所谓的括号,决定运算的先后顺序
(逆)波兰表达式(前(后)缀)来不用界限符,也能表达运算顺序
在这里插入图片描述

在这里插入图片描述

一个中缀表达式可能对应很多个后缀表达式或者前缀表达式

中缀转后缀

在这里插入图片描述
在这里插入图片描述

一定要遵循左优先原则
保证机算和手算结果相同(且12345最后是对应的,比较整齐)

后缀计算

手算
在这里插入图片描述

机算
在这里插入图片描述
b先出栈是右操作数,a后出栈左操作数

中缀转前缀

在这里插入图片描述
遵循有优先原则,运算出来的结果也是比较整齐的

在这里插入图片描述
注意是从右往左扫

小结

在这里插入图片描述

用栈来实现中缀相关操作(求值和转后缀)

中缀表达式转后缀表达式(机算)

在这里插入图片描述
前一个运算符是否可以出栈
全靠
看后一个运算符的优先级
优先级比前面高,不能,再看下一个,如果运算级相同就出栈(只出一个*号)
然后再看栈顶的右一个运算符
重新再上面的那个操作
在这里插入图片描述

中缀求值

先把中缀转为后缀然后
然后求后缀就ok了(计算机的处理方式)

在这里插入图片描述
+
在这里插入图片描述

=
在这里插入图片描述

小结

在这里插入图片描述

栈在递归中的应用

递归调用的过程,从第一个函数到最后一个函数(判断条件不成立),一个入栈,然后从栈顶开始调用,一个个出栈,这不就是先进后出
就是一个后进先出的过程
在这里插入图片描述
适合用递归的问题
在这里插入图片描述
1.递归
在这里插入图片描述

2.斐波那契数列
在这里插入图片描述

小结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小袁拒绝摆烂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值