2024年最全数据结构 后缀表达式【深入剖析堆栈原理】_后缀表达式原理(1),2024年最新精心整理

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

📚法则一:如果遇到一个运算符op以及左括号“(”,此时栈如果为空,则直接将其进栈
📚法则二:若是遇到了操作数num,就将其直接输出
📚法则三:如果栈不为空,则只有当op的优先级高于栈顶运算符优先级时才将其进栈,否则将栈顶op弹出
📚法则四:若当前op进栈时发现栈中有与之相同op,则出栈其一,再加当前op压入栈中
📚法则五:若遇到右括号,则开始弹出栈字符,直到左括号为止
📚法则六:只要当遇到右括号“)”时,才从栈中弹出左括号“(”,否则一直遍历

  • 以上法则是我们要了解后缀表达式转换的基本,你必须将其记牢

🌳层层剖析【堆栈原理展示】

有了固定的发展,接下来就是具体的案例和分析

  • 我们以此表达式为例进行讲解【5 + 8*2 + ( 3 * 9 + 6 )*4】

Part1

  • 首先是5,根据法则二,直接放入表达式
  • 然后是操作符【+】,根据法则一,栈为空,直接入栈
  • 接着是8,同理,直接放入表达式
  • 其次是操作符【*】,因优先级高于【+】,故直接入栈
  • 最后又碰到一个2,同理,直接放入表达式

在这里插入图片描述


Part2
【5 + 8*2 + ( 3 * 9 + 6 )*4】

  • 读到【+】,这时要注意,引起优先级低于【*】,所以乘号出栈,放入表达式,但此时遍历到的操作符op与栈中的【+】一致,故栈中的【+】也因放入表达式,接着将遍历到的【+】入栈

在这里插入图片描述


Part3
【5 + 8*2 + ( 3 * 9 + 6 )*4】

  • 首先读到左括号【(】,这代表一个子表达式的开始,因其优先级最高,故直接入栈
  • 然后是3,根据法则二,直接放入表达式
  • 接着遇到【*】,此时要注意,根据法则六,因为还没有碰到右括号【)】,说明子表达式还没结束,故直接入栈
  • 最后是9,同理,放入表达式

在这里插入图片描述


Part4
【5 + 8*2 + ( 3 * 9 + 6 )*4】

  • 首先我们遇到【+】,这是看到栈顶op为【*】,比其低,根据法则三,弹出栈顶元素,并将当前op入栈
  • 然后是6,根据法则二,直接放入表达式
  • 最后读到【)】,表示子表达式结束,开始逐个弹出栈顶元素,直到左括号【(】弹出后结束(括号均不放入表达式)

在这里插入图片描述


Part5
【5 + 8*2 + ( 3 * 9 + 6 )*4】

  • 碰到【*】,因其优先级高于栈中的【+】,故直接入栈
  • 然后是4,根据法则二,直接放入表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值