那么既然都是同样结果的表达式,中缀表达式大家都能看的懂,为什么还要出现前缀和后缀表达式呢?
是呀,但问题是 ,不是我们在计算,是计算机在工作,中缀表达式计算机用不了啊,它说这不是它的菜。
它是在栈中取运算数字和运算符的,遇到一个运算符,就取出两个数字出来运算。
那么怎么进行前缀,中缀,后缀之间的转换呢?
我们首先要解决的问题就是优先级,例如 X=A+B*(C-D)/E,我们在不知道运算符的优先级时通常会怎么做呢?
是不是在我们想要先进行计算的那一步加上括号呢?
那就以 X=A+B*(C-D)/E 为例:
先转换成前缀表达式
第一步:先加括号:(X=(A
+
(
(
(B*(C-D) ) ) / E ) ) )
第二步:在要计算那一步,先取出运算符,放到这一步括号的前面,就OK了
1:先计算
(C-D)
那就变成了
-(CD)
2:接着
(B*(C-D))
* (B-(CD))
3:接着算除以E
4: 接着
(A
+
(
(
(B*(C-D) ) ) / E ) )
+(A/( *
(B-(CD)) E))
5: 最后
(X=(A + ( ( (B*(C-D) ) ) / E ) ) ) =(X+(A/( * (B-(CD)) E)))
第三步:去掉所有的括号
X=A+B*(C-D)/E
前缀表达式是:=X+A/*B-CDE
转换成后缀表达式(与前缀的方法是一样的)
第一步:先加括号:(X=(A + ( ( (B*(C-D) ) ) / E ) ) )
第二步:在要计算那一步,先取出运算符,放到这一步括号的前面,就OK了
1:先计算
(C-D)
那就变成了
(CD)-
2:接着
(B*(C-D))
B ((CD)-)*
3:接着算除以E
((B(CD)-)*)E)/
4:
(A
+
(
(
(B*(C-D) ) ) / E ) )
(A(B((CD)-)*E)/)+
5:
(X=(A + ( ( (B*(C-D) ) ) / E ) ) ) (X(A(B((CD)-)*E)/)+)=
第三步:去掉所有括号
![C语言前缀表达式,中缀表达式和后缀表达式 C语言前缀表达式,中缀表达式和后缀表达式](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)