中缀表达式转前缀和后缀表达式

中缀表达式:(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例: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*cd)

两步合并

-+a+b*cd) e+g*h

为了看这方便,可以去掉提取运算符后的括号:

-+a+b*ce+g*h

第三步:

a+b*c的提取结果:*a+bc

向上合并:

-+*a+bce+g*h

去括号:-+*a+bc e+g*h

第五步:提取 (a+b)

结果:-+*+abc d e+g*h

去括号:-+*+abcd e+g*h

第六步:e+g*h) 

过程和上面的一样,这里略过:  *e+gh  =  *+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*cd+ e+g*h-

=a+bc*d+ e+g*h-

=a+bc*d+ e+g*h-

=ab)+c*d+ e+g*h-

=ab+c*d+ e+g*h-

=ab+c*d+ e+gh*-

=ab+c*d+ e+gh*-

=ab+c*d+ eg)+h*-

=ab+c*d+ eg+h*-

你可能感兴趣的:(软考,算法)