本文适用于想深入理解后缀式,而不是人云亦云的复现的人。
后缀表达式的规则我就不说了,然后来理解一下:
后缀表达式的构造方法要从后缀表达式的计算方法中诞生。
计算方法,我也不说了,我们直接理解一下他的特点:
表达式中有字母和符号。
字母的前后顺序代表了计算顺序,连续的一串字母中,越靠后的越先算。
符号的前后顺序,越靠前的越先算。
由此,我们的出一个原则:越先算的,也就是优先级越高的,就应该早点放入表达式。
这也就能解释为什么优先级高就可以落在符号栈里,而优先级低或者相等就要把下面高优先级或者同优先级的放入表达式栈。
同时,括号优先级最高,所以把括号作为一个单一的部分,一旦括号匹配成对,就提前把括号中的东西放入表达式栈,这样能保证括号中优先级最高。
当你在处理乘方的时候又会出现新的问题:连续乘方2^3^2=512 ,但是经过处理后会变成2^3^2=64,第一个的含义是2^(3^2),第二个含义是(2^3)^2,之所以会出现这种情况,是因为我们对于连续符号的处理。
比如我们1+1+1,或者2*2*2,6/2/3这种,都是从前往后处理的,但是其实我们对于^符号的连续处理,目标是后面先进行运算,所以我们要对^的逆波兰式转化进行特别的处理,就是在优先级判断上。
具体操作可以看我这篇文章的逆波兰式构造部分