方法1:
该方法来自严蔚敏版数据结构,基本思路是:设置两个工作栈,一个操作数栈,一个操作符栈,在(自左至右)扫描算术表达式时,遇到操作数直接入操作数栈,若遇到操作符,则根据操作符优先级判断下一步操作(
“操作符优先级规则
”):若其优先级高于栈顶操作符,则入栈,否则(相等或小于),弹出栈顶算符并从操作数栈弹出两个操作数,计算,将计算结果入操作数栈,继续比较与栈顶操作符的优先级,若仍然等于或低于之,则计算,直至大于之,则将此操作符入栈;左括号一定入栈,且其优先级低于后续来到的任何操作符,右括号一定出栈并计算直至遇到左括号,另外栈的开始以“#”开始,算术表达式以“#”结束,做结束标志。当栈空时,计算结束。
方法2:
采用后缀表达式,即“逆波兰式”,因为计算机处理后缀表达式求值问题比较方便,在计算时只需要一个操作数栈,即:将遇到的操作数入栈,凡是遇到操作符便从栈中弹出两个操作数执行计算,并将结果存于栈中,直到后缀表达式的最后一个操作符处理完毕,最后一个入栈的数值即为最终的表达式的值。这里的关键是怎样求得表达式的后缀表达式,其规则与方法1的
“操作符优先级规则”
基本一致,具体是这样的:转化过程只需