数据结构问题,​算术表达式a+(b-c+d)*e的后缀式是

如题所述

转换是从左到右读取
1、遇到a
2、遇到+
3、遇到(,先进行括号计算,+号推后
4、遇到b
5、遇到-,因为括号把a隔开,所以还没凑齐两个数,所以放到后面
6、遇到c,凑齐两个数可以进行计算,现在后缀表达式为abc-
7、遇到+,前面的只有一个值,是bc-的结果,所以要再读入一个值
8、遇到d,凑齐了两个数可以计算,a bc- d +
9、遇到),括号优先结束
10、遇到*高于+先进行计算
11、e于()中的结果进行计算,现在后缀表达式为abc-d+e*
12、最后进行+的运算
得出结果abc-d+e*+
这转换方法也跟后缀式的计算方法有关,比如堆栈的使用,可以将abcde分别代入12345,后缀式的计算方法,abc在栈中,a在栈底,遇到-运算符,从bc从栈中出栈,计算,2-3=-1又放回栈中,遇到d压入栈,遇到+,又取出-1+4=3,又压入栈中,遇到e压入栈,又遇到*,3和4又出栈3*5=15压回栈中,遇到+,1+15,最后结果为16,这就是后缀式的计算,如果将abcde代入12345带入中序式子a+(b-c+d)*e结果也是一样的
不知道我能不能很好的说清楚,望有用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-06-16


如图

第2个回答  2016-06-16
abc-d+e*+追问

有过程么

追答

后缀式就是把操作数放前面,把运算符放后面。例如:
a+b 转换为ab+
a+b*c 转换为abc*+
以此类推就好,最后进行计算的运算符放在最后。

追问

这个好像是套公式一样,有没有原理比如利用栈来解释

追答

嗯当然有的,但是比较麻烦,需要判断运算符的优先级。我现在一下子也讲不清楚。
帮你找了一篇文章,讲得很清晰,你可以看看。:)
http://blog.csdn.net/gaoxin1076/article/details/7364098

追问

没看懂,那你帮我看看这个A*-B+C的后缀

本回答被提问者和网友采纳
第3个回答  2017-12-21
abcd+-e*+
相似回答