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

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

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
中缀表达式是我们常见的数学表达式的一种写法,它是以操作符位于操作数的两侧的形式来表示计算顺序。而前缀表达式后缀表达式中缀表达式的另外两种等价的写法。 将中缀表达式换为前缀表达式的方法如下: 1. 从右到左遍历中缀表达式的每个字符。 2. 如果字符是操作数,直接输出到前缀表达式。 3. 如果字符是操作符,有两种情况: - 如果操作符的优先级比栈顶操作符的优先级高,将操作符入栈。 - 如果操作符的优先级比栈顶操作符的优先级低或相等,弹出栈顶操作符,并将弹出的操作符和操作数组合为一个前缀表达式,再将该前缀表达式入栈。 4. 当遍历完中缀表达式后,将栈中的操作符依次弹出,并将每个弹出的操作符和操作数组合为一个前缀表达式,再将该前缀表达式入栈。 5. 最后得到的栈顶即为换后的前缀表达式。 将中缀表达式换为后缀表达式的方法基本相同,只需将步骤3中操作符的优先级比较符号调整为"低或相等"即可。 中缀表达式后缀表达式的方法如下: 1. 从左到右遍历中缀表达式的每个字符。 2. 如果字符是操作数,直接输出到后缀表达式。 3. 如果字符是操作符,有两种情况: - 如果操作符的优先级比栈顶操作符的优先级高或栈为空,将操作符入栈。 - 如果操作符的优先级比栈顶操作符的优先级低或相等,弹出栈顶操作符,并将弹出的操作符和操作数组合为一个后缀表达式,再将该后缀表达式入栈。 4. 当遍历完中缀表达式后,将栈中的操作符依次弹出,并将每个弹出的操作符和操作数组合为一个后缀表达式,再将该后缀表达式入栈。 5. 最后得到的栈顶即为换后的后缀表达式。 通过上述步骤,我们可以将中缀表达式换为前缀和后缀表达式
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值