一、前言

此篇只着重讲解中缀转后缀的过程,多次查阅他人讲解,都觉得讲解甚是云里雾里,记录思考过程,以便回顾,如有错误,欢迎指出,正确的知识总是在不断的知识碰撞中得出

二、 逻辑图示

 

 

 

三、 案例图解

1. 

 

根据上图所示

1.1 “9” 为操作数 -> 直接输出

 

 

1.2 “+” 为操作符且不等于”(” || “)”且栈为空 -> 压栈

 

 1.3 “(” 直接-> 压栈

 

 1.4 “3” 为操作数 -> 输出

 

 1.5 “-” 位操作数,由于当前栈顶元素为左括号,不需要比较 -> 压栈

 

 

1.6  “1” -> 输出

 

 

 

1.7 “)” : 遇到右括号,此时将左括号上的元素依次弹出,并将弹出的元素除了左右括号之外依次输出

 

 

1.8  “*”: 此时操作符的优先级大于栈顶元素 -> 压栈

 

 

1.9 “3” -> 输出

1.10 “+” : 此时改操作符的优先级不大于栈顶,依次将比自己优先级打的操作符出栈,知道找到比自己优先级高的栈顶为止,这里由于 在栈内的元素分别是 “*” 和 “+” ,当前操作符 “+” 都小于这两个操作符,于是这两个操作符都依次出栈并输出,并将当前操作符入栈

 

 1.11 “10” -> 输出

1.12 “/” 操作符优先级> 栈顶元素(“+”) -> 压栈

 

 1.13 “2” -> 输出

1.14 当元素都遍历完后,检查栈是否为空,如果非空,依次出栈并输出

 

 

四、 总结

  如果做到中缀转后缀后,可以往下做后缀的计算,大致思路是,如果是操作数就压栈,如果是操作符就连续出两个栈的数字并计算结果,将结果压栈
 

 

版权声明:本文为timetimetime原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/timetimetime/p/11811767.html