中缀表达式:(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。(源自百度百科的解释)
1,一个简单地中缀表达式:a+b
前缀表达式:+ab
后缀表达式:ab+
2,其中a和b分别是一个表达式,而 “+”就是运算符
转成前缀表达式就是把运算符放到前面,放到后面就是后缀表达式
总体的思路:
把每一个表达式先用括号括上,再把运算符提到括号前(后)
a+b
(1)加括号:(a)+(b) ——> ((a)+(b))
(2)把运算符提到括号前 :+((a)(b))
(3)去掉括号:+ab
3,来个复杂的例子:
(a+b)* c+d-(e+g)*h
(1)加括号:根据运算法则,先 */后+-,有括号的要优先
(a+b)*c+d-(e+g)*h
=((a+b)*c)+d -((e+g)*h)
=(((a+b)*c)+d) - ((e+g)*h)
=((((a+b)*c)+d) - ((e+g)*h))
此时的(((a+b)*c)+d) 就相当于 a , ((e+g)*h) 相当于 b
(2)提取运算符
第一步: -((((a+b)*c)+d) ((e+g)*h))
此时再看 (((a+b)*c)+d), ((a+b)*c) 相当于a,而 d 相当于 b
提取运算符:
第二步: +(((a+b)*c)d)
两步合并
-(+(((a+b)*c)d) ((e+g)*h))
为了看这方便,可以去掉提取运算符后的括号:
-+((a+b)*c)d ((e+g)*h)
第三步:
((a+b)*c) 的提取结果:*((a+b)c)
向上合并:
-+*((a+b)c)d ((e+g)*h)
去括号:-+*(a+b)c d ((e+g)*h)
第五步:提取 (a+b)
结果:-+*+(ab)c d ((e+g)*h)
去括号:-+*+abcd ((e+g)*h)
第六步:((e+g)*h)
过程和上面的一样,这里略过: *(e+g)h = *+egh
最终的结果:-+*+abcd *+egh
4,转成后缀的思路和转成前缀的思路一致,这里就直接脱式运算了
((((a+b)*c)+d) - ((e+g)*h))
=((((a+b)*c)+d) ((e+g)*h))-
=(((a+b)*c)+d) ((e+g)*h)-
=((a+b)*c)d+ ((e+g)*h)-
=((a+b)c)*d+ ((e+g)*h)-
=(a+b)c*d+ ((e+g)*h)-
=(ab)+c*d+ ((e+g)*h)-
=ab+c*d+ ((e+g)*h)-
=ab+c*d+ ((e+g)h)*-
=ab+c*d+ (e+g)h*-
=ab+c*d+ (eg)+h*-
=ab+c*d+ eg+h*-