后缀表达式及应用

概念相关

后缀(postfix)又称为逆波兰记法(reverse Polish notation)。


后缀表达式求值

当一个表达式以后缀记法给出时,无需知道任何优先规则。
算法描述:当遇到一个数时就把它压入栈中;在遇到一个操作符时,该操作符就作用于从该栈弹出的两个数上,再将所得结果压入栈中。
例如,后缀表达式:6523+8*+3+*
前4个数字放入栈中,此时栈变成(右边是栈顶)
6 | 5 | 2 | 3 |    |    |    |    |
下面读到一个+号,3和2从栈中弹出计算,他们的和5再被压入栈中。
6 | 5 | 5 |    |    |    |    |    |
接着8进栈
6 | 5 | 5 | 8 |    |    |    |    |
现在读到*号,8和5弹出并且8*5=40进栈
6 | 5 | 40 |    |    |    |    |    |
如此重复,以下只给出过程栈图
6 | 45 |    |    |    |    |    |    |
6 | 45 | 3 |    |    |    |    |    |
6 | 48 |    |    |    |    |    |    |
288 |    |    |    |    |    |    |    |


中缀到后缀的转换

只允许操作符“+”、“*”、“(”、“)”。“(”进栈前优先级最高,在栈中优先级最低。
算法描述:依次读入字符。当读到一个操作数的时候,立刻把它放到输出中;当读到操作符“+”、“*”、“(”中的任何一个,从栈中弹出栈元素直到发现优先级更低的元素为止,然后该操作符进栈;当读到操作符“)”时将元素弹出直到遇到一个对应的“(”。
算法思想:栈代表挂起的操作符。在当前操作符要进栈之前,那些栈中比它优先级高或相等的操作符就应该弹出完成计算。
例如,中缀表达式:a + b * c + (d * e + f) * g
转换成后缀表达式是:a b c * + d e * f + g * +。过程如下:
这里写图片描述
这里写图片描述
这里写图片描述


用后缀表达式构造一颗表达式树

算法描述:类似后缀求值算法,一次一个符号地读入表达式。如果符号是操作数,那么就建立一个单结点树并将它压入栈中;如果是操作符,那么就从栈中弹出两棵树T1和T2(T1先弹出)并形成一颗根为操作符的新树,它的左右儿子分别是T2和T1,然后将这颗新树压入栈中。
例如,后缀表达式:a b + c d e + * *。(栈从左到右增长)
前两个符号是操作数,因此创建两棵单结点树并将指向它们的指针压入栈中。
这里写图片描述
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值