中缀,后缀,前缀表达式转换和求值

中缀,后缀,前缀表达式转换和求值

平常我们阅读使用的都是中缀表达式,但是计算机并不能识别,需要转成前缀或后缀表达式计算机才能进行计算(转化时还能去掉括号)。整个过程分为两部分:表达式转换,求值。

表达式转换。

一般的表达式中常见的运算: + , − , × , / +,-,\times,/ +,,×,/

特殊的符号: (   , ) ( \ ,\quad ) ( ,)

特殊运算符: ∧ \wedge 幂指数运算

以字符串 a × b + c − d / ( e ∧ f ∧ g × h ) a \times b + c - d / (e^{\wedge} f^{\wedge} g \times h) a×b+cd/(efg×h) 为例。

中缀转后缀

过程:

  1. 读入数字,直接输出
  2. 读入 + , − , × , / +,-,\times,/ +,,×,/ 之前 , 输出前面优先级大于等于该运算符的运算符,然后将该字符存入字符栈;最后输出全部剩余字符
  3. 左右括号:左括号,直接读入字符栈;读入右括号,输出字符栈中的字符,一直到左括号为止。
  4. 读入 ∧ \wedge , 要输出前面优先级大于该运算符的运算符(实际上并没有)。

结果: a , b , × , c , + , d , e , f , g , ∧ , ∧ , h , × , / , − a,b,\times,c,+,d,e,f,g,\wedge,\wedge,h,\times,/,- a,b,×,c,+,d,e,f,g,,,h,×,/,

中缀转前缀

和后缀很相似,但是前缀都是倒过来的:倒着读入中缀表达式

  1. 读入数字,直接存入输出列
  2. 读入 + , − , × , / +,-,\times,/ +,,×,/ 之前 , 弹出前面优先级大于该运算符的运算符,然后将该字符存入字符栈;最后弹出全部剩余字符
  3. 左右括号:右括号,直接读入字符栈;读入左括号,输弹出字符栈中的字符,一直到右括号为止。
  4. 读入 ∧ \wedge , 要弹出前面优先级大于等于该运算符的运算符(实际上只有自己)。

最后倒着输出!!!

结果: − , + , × , a , b , c , / , d , × , ∧ , e , ∧ , f , g , h -,+,\times,a,b,c,/,d,\times,\wedge,e,\wedge,f,g,h ,+,×,a,b,c,/,d,×,,e,,f,g,h

后缀转中缀

其实更加简单。

为了方便起见,我们默认初始的单个变量左右都带有括号。左右是括号的称为表达式。

按照后缀表达式的运算顺序,在碰到运算操作的时候,将运算符插入到前面两个表达式中间,然后再两个表达式两端加上括号,构成一个新的表达式加入到栈中。

最后栈中只剩下一个中缀表达式,就是最终的结果。

前缀转中缀

和后缀转中缀原理是一样的,注意顺序即可。

运算

后缀表达式

正常读入。数字存入数字栈;读入运算符,立即对栈顶两个数进行运算,然后合并成一个数。

s t a c k [ t o p − 1 ] = s t a c k [ t o p − 1 ]    o p e r a t o r   s t a c k [ t o p ] t o p − − stack[top-1] = stack[top-1]\ \ operator \ stack[top]\\ top-- stack[top1]=stack[top1]  operator stack[top]top

前缀表达式

倒着读入。也是读入运算符立即运算,顺序不同。

s t a c k [ t o p − 1 ] = s t a c k [ t o p ]    o p e r a t o r   s t a c k [ t o p − 1 ] t o p − − stack[top-1] = stack[top]\ \ operator \ stack[top-1]\\ top-- stack[top1]=stack[top]  operator stack[top1]top

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值