前、中、后缀表达式解析与转换

前、中、后缀表达式

我们常见的表达式都是中缀表达式,比如1+35-3(5-8)。可是它对计算机并不友好。计算机采用堆来计算表达式,于是有了前缀和后缀表达式。为了更好地理解它们,我们先来看看运算符及其优先性。 运算符优先级有15级,从1-15逐级降低。优先级相同时根据其结合性计算。前、中、后缀表达式解析与转换
我们看看计算机如何计算前缀表达式的。
从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇
到运算符,弹出栈顶的两个数,用运算符对它们做相应的计算,
并将结果入栈,重复上述过程直到表达式最左端,最后运算得
出的值即为表达式的结果。
后缀表达式与此相反,这里不再赘述。
转换方法1:先加括号,再去括号。
例如a+bc+(de+f)g
(1)先按照运算符的优先级对中缀表达式加括号,变成
((a+(b
c))+(((d*e)+f)g))
(2)自内到外将运算符移到括号的前面,然后去括号,变成
a:去掉第一层括号
((a+*bc+(*de+f)*g))
b:去掉第二层括号
((a+*bc+(+*def*g))
c:去掉第三层括号
(a+*bc*+(+*defg))
d:去掉第四层括号
++a*bc*+*defg
转换方法2:先排列数,再求符号
(1)把运算数按原顺序排列起来,变成
a b c d e f g
(2)先算d
e,故a b c *de f g
(3)再算括号里面,故a b c +*def g
(4)计算所有乘号内容:a*bc*+*defg
(5)对整个式子求和:++a*bc*+*defg