用栈实现简单表达式求值
目录
用栈实现简单表达式求值
准备
建立两个栈:操作数栈+操作符栈
步骤
没有括号的情况
注意:弹出时两个操作数的顺序要反一下,以确保运算的顺序和输入的顺序一致
|
|
处理括号
对于’(’:遇到时就加入操作符栈
对于’)’:遇到时不断弹出操作符和操作数,直到操作符栈顶为’)‘时将它弹出。(也就是计算这两个括号之间的表达式)
处理负号
‘-‘既可以看做是减号又可以看做是负号。
判断负号
如果负号是第一个字符或者前一个字符是’(’,那么它就是负号。
处理负号
- 负号后面是一个操作数:读入之后取负。
- 负号后面是括号:将整个括号内的表达式计算完之后取负。
首尾处理
为了保证计算结束时操作数栈中只有一个值,可以在读入表达式后在表达式的首尾用一对括号包裹。