本文参考了iu_81的文章栈实现表达式求值,表示感谢!
算法要点:
1) 采用双栈,一个栈用来保存运算符,一个栈用来保存数据
2) 符号优先级设置
i(+ -)< (* /)
ii 相同运算符,栈内优先级高于栈外优先级
ii 对于栈内:左括号的优先级最高 右括号优先级仅高于'#'
ii 对于栈外:与上面相反
3)计算时机
当栈内运算符优先级 > 栈外运算符优先级:可以计算,计算结果压入数据栈
当栈内运算符优先级 < 栈外运算符优先级:栈外运算符压入运算符栈
当栈内运算符优先级 = 栈外运算符优先级:只可能是左括号和右括号的情况,将左括号
出栈即可
算法理解建议:
输入一个简单的表达式,最好包含括号的情况,然后单步调试,跟踪两个栈的数据变化情况
算法实现(包括测试代码):