栈之中缀表达式转后缀表达式(逆波兰表达式)思路
一、前言
此篇只着重讲解中缀转后缀的过程,多次查阅他人讲解,都觉得讲解甚是云里雾里,记录思考过程,以便回顾,如有错误,欢迎指出,正确的知识总是在不断的知识碰撞中得出
二、 逻辑图示
三、 案例图解
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 当元素都遍历完后,检查栈是否为空,如果非空,依次出栈并输出
四、 总结
如果做到中缀转后缀后,可以往下做后缀的计算,大致思路是,如果是操作数就压栈,如果是操作符就连续出两个栈的数字并计算结果,将结果压栈