C语言前缀表达式,中缀表达式和后…

  之前深深沉陷于中缀转前缀和后缀的规则,总是比较晕,那么有一个比较好的方法可以不用再去想那些规则,想写下来与大家分享。
               
    1. 中缀表达式就是正常的表达式,我们都能够看得懂的,比如 X=A+B*(C-D)/E,3+4,a+(b+c)*d-e;
  2. 前缀和后缀是什么呢?  举个例子:      +34                        3+4                        34+
                                                                                                                  前缀                      中缀                        后缀
                                                                                也称为:  波兰式                                                    逆波兰式
                   
那么既然都是同样结果的表达式,中缀表达式大家都能看的懂,为什么还要出现前缀和后缀表达式呢?
是呀,但问题是 ,不是我们在计算,是计算机在工作,中缀表达式计算机用不了啊,它说这不是它的菜。
它是在栈中取运算数字和运算符的,遇到一个运算符,就取出两个数字出来运算。

那么怎么进行前缀,中缀,后缀之间的转换呢?
我们首先要解决的问题就是优先级,例如 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 
       ((B*(C-D))/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)))
第三步:去掉所有的括号
                                                     
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))                                                                                    ((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)/)+)=
第三步:去掉所有括号
        X=A+B*(C-D)/E          后缀表达式是: XABCD-*E/+=
        理解之后是不是很简单呢? C语言前缀表达式,中缀表达式和后缀表达式

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值