转化原因:由于机器运行中难以实现多项式的优先级运算,也没有括号加以辅助运算。
我们需要将中缀表达式转化为前缀表达式或者后缀表达式让机器挨个遍历。
来看一个简单的例子a+b,在+号两边加上(),转化为(a+b),这样前缀就变成了+ab,后缀就是ab+
懂了没~前缀就事用符号替代左括号,后缀就是替换右括号
下面讲一下转化
a+b-a*((c+d)/e-f)+g
我们为每两个元素的运算加一层括号
(a+b)-a*((c+d)/e-f)+g
//注意不仅要为+ -运算加括号,两元素乘除也需要
//(c+b)视为一个元素
(a+b)-a*([(c+d)/e]-f)+g
(a+b)-(a*([(c+d)/e]-f))+g
[(a+b)-(a*([(c+d)/e]-f))]+g
( [(a+b)-(a*([(c+d)/e]-f))]+g)
这里没有彩色铅笔,实际遇到复杂的表达式最好不要目测,动动笔,用对应的符号替换掉左括号就实现了前缀转化
一个左括号一个坑,挨个替换,熟练后做选择就简单了
+[(a+b)-(a*([(c+d)/e]-f))]g
+ - (a+b)(a*([(c+d)/e]-f))g
+ - +ab(a*([(c+d)/e]-f))g
以此类推,用对应的符号替换对应括号,删去右边括号
答案为 + - +aba-/+cdefg
同样的右侧括号蹲坑就实现了后缀表达式转化
答案为ab+and+e/f--g+