【数据结构与算法】深入理解后缀表达式(逆波兰式)

本文适用于想深入理解后缀式,而不是人云亦云的复现的人。

后缀表达式的规则我就不说了,然后来理解一下:

后缀表达式的构造方法要从后缀表达式的计算方法中诞生。

计算方法,我也不说了,我们直接理解一下他的特点:

表达式中有字母和符号。

字母的前后顺序代表了计算顺序,连续的一串字母中,越靠后的越先算。

符号的前后顺序,越靠前的越先算。

由此,我们的出一个原则:越先算的,也就是优先级越高的,就应该早点放入表达式。

这也就能解释为什么优先级高就可以落在符号栈里,而优先级低或者相等就要把下面高优先级或者同优先级的放入表达式栈。

同时,括号优先级最高,所以把括号作为一个单一的部分,一旦括号匹配成对,就提前把括号中的东西放入表达式栈,这样能保证括号中优先级最高。

当你在处理乘方的时候又会出现新的问题:连续乘方2^3^2=512 ,但是经过处理后会变成2^3^2=64,第一个的含义是2^(3^2),第二个含义是(2^3)^2,之所以会出现这种情况,是因为我们对于连续符号的处理。

比如我们1+1+1,或者2*2*2,6/2/3这种,都是从前往后处理的,但是其实我们对于^符号的连续处理,目标是后面先进行运算,所以我们要对^的逆波兰式转化进行特别的处理,就是在优先级判断上。

具体操作可以看我这篇文章的逆波兰式构造部分

【小项目】C++从0开始设计一个整型计算器(支持正负号,幂次方,公式正确性诊断)_亦梦亦醒乐逍遥的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

亦梦亦醒乐逍遥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值