表达式求值的java实现
[例子和习题出自数据结构(严蔚敏版), 本人使用java进行实现. ?转载请注明作者和出处, ?如有谬误, 欢迎在评论中指正. ]
对整数表达式求值. 表达式中可能包含+-*/四则运算, 以及括号, 比如:4 + 2 * 3 - 10 / 5,?(1+2) * (4 + 5) - (9 / 7)等.
思路: 将括号之间的内容当做子表达式求值, 得出子表达式的结果后就可以去掉括号了.
使用optr栈存储运算符,?opnd栈存储操作数. 解析表达式, 如果得到操作数就存入opnd栈中, 如果得到运算符, 就根据所得的运算符和optr栈顶运算符的优先级比较结果, 进行相应的操作.
?
1. 定义优先级和优先级表
测试的结果为:
1 + 2 ?= 3
4 + 2 * 3 - 10 / 5 = 8
(1+2) * (4 + 5) - (9 / 7) = 26
(1 + (3 * (4 - 9))) = -14
(1 + (3 * (4 - 9))) + (3 * (2 + 3)) = 1
?
可见结果是正确的.