[转]手工转换中缀式与前、后缀式

后缀式:

 

逆波兰式

 

逆波兰式是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示 表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。对于 表达式x:=(a+b)*(c+d),其后缀式为xab+cd+*:=。
 
 

 

1.1 后缀式(前缀式)转中缀式 

举例:如希望将后缀式  ab*cde/-f*+  转换为中缀式

   

  从左向右查找运算符,找到则将该符号与前面两数结合,循环即可。

 

1.2 中缀式转后缀式(前缀式)

举例:请将中缀式  a * ( b *(c+d/e) - f)  转换为后缀式

      

   

  首先按照运算符的优先级对所有的运算单位加括号,然后,画图将括号内符号移动到相应括号后并去除括号。BTW,这个画法没见别人用过,属于原创范畴,如有雷同,纯属偶然。另外,如果您只有一支黑色铅笔,可以考虑小括号、方括号花括号齐上阵。

至此,软考这类题目的分应该可以拿下了。

中缀表达转换后缀表达的一种常用方法是使用逆波兰表示法(RPN)。以下是将中缀表达转换后缀表达的步骤: 1. 创建一个空的栈和一个空的后缀表达列表。 2. 从左到右扫描中缀表达。 3. 如果当令牌是操作数,则将其添加到后缀表达列表中。 4. 如果当令牌是左括号,则将其压入栈中。 5. 如果当令牌是右括号,则弹出栈中的所有运算符,将它们添加到后缀表达列表中,直到遇到左括号为止。然后弹出左括号并将其丢弃。 6. 如果当令牌是运算符,则将其压入栈中。但在这样做之,将与栈顶运算符的优先级进行比较。如果栈顶运算符具有更高或相等的优先级,则弹出栈顶运算符并将其添加到后缀表达列表中。重复此步骤,直到栈顶运算符优先级低于当令牌为止。 7. 当扫描完整个中缀表达后,如果栈中仍有运算符,则将它们依次弹出并添加到后缀表达列表中。 8. 后缀表达列表就是转换后的后缀表达。 以下是一个示例,演示如何将中缀表达“3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3”转换后缀表达中缀表达: 3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3 后缀表达: 3 4 2 * 1 5 - 2 3 ^ ^ / + 解释: - 3 添加到后缀表达列表中。 - + 添加到栈中。 - 4 添加到后缀表达列表中。 - * 与栈顶运算符 + 进行比较,* 的优先级高,将 * 添加到栈中。 - 2 添加到后缀表达列表中。 - / 与栈顶运算符 * 的优先级相等,将 / 添加到栈中。 - ( 添加到栈中。 - 1 添加到后缀表达列表中。 - - 与栈顶运算符 ( 的优先级相等,将 - 添加到栈中。 - 5 添加到后缀表达列表中。 - ) 弹出栈中的所有运算符,将它们添加到后缀表达列表中,直到遇到左括号为止。添加的运算符依次为 - 和 /。 - ^ 与栈顶运算符 / 的优先级相等,将 ^ 添加到栈中。 - 2 添加到后缀表达列表中。 - ^ 与栈顶运算符 ^ 的优先级相等,将 ^ 添加到栈中。 - 3 添加到后缀表达列表中。 - 弹出栈中的所有运算符,将它们添加到后缀表达列表中。添加的运算符为 ^。 - + 弹出栈中的所有运算符,将它们添加到后缀表达列表中。添加的运算符依次为 /、* 和 +。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值