中缀表达式转后缀表达式
中缀表达式:二元运算符总是置于与之相关的两个运算对象之间。平时的运算表达式,例如1+32。
后缀表达式:每一运算符都置于其运算对象之后,例如后缀表达式 123+
如何转换?
第一步:给原表达式中的每一组运算均加上括号(即每一个运算符两边算作一组运算)
第二步:从内向外将运算符挪到对应括号的后面(第一步知一个运算符对应一个括号)
- “+”移动到绿色括号外 “ - ”移动到红色括号外 “ * ”移动到蓝色括号外 “/”移动到黄色括号外
第三步:去掉所有的括号。
至此中缀转后缀就完成了,为什么要这样做呢?后缀表达式如何计算呢?
- 因为中缀表达式人读起来比较好理解,但是计算机处理起来就很麻烦,运算顺序往往因表达式的内容而定,不具规律性。所以用后缀表达式进行运算。
后缀表达式计算
第一步:转换好的后缀表达式从左往右依次扫描,并依次入栈。
- 如果是数字,那么直接入栈到num中
- 如果是运算符,将栈顶的两个数字出栈(因为我们考虑的运算符加、减、乘、除都是双目运算符,只需要两个操作数),出栈后对两个数字进行相应的运算,并将运算结果入栈
- 直到遇到’\0’
为了直观感受计算过程,我们将字母换成对应的数字,并得到数字算式的后缀表达式。
最后结果为2与中缀表达式结果相同。