算法思路:
使用两个栈,操作符栈optr(operator),操作数栈opnd(operand)
对中缀表达式求值的一般规则:
1. 在optr栈中压入一个’=‘
2. 从输入流获取一个字符ch
3. 取出optr的栈顶值optrTop
4. 当 optrTop != ’=‘ 或 ch != ’=‘时,循环执行一下工作,否则结束算法,此时在opnd栈的栈顶得到运算结果
while(!(optrTop!= '=' && ch = '='))
{
1.若ch不是操作符,读操作数operand并进opnd栈,并读入下一字符送入ch;
2.如ch是操作符,将比较ch的优先级和optrTop的优先级:
若optrTop<ch,则ch进optr栈,从中缀表达式取下一字符送入ch;
若optrTopc>ch,则从opnd栈退出a2和a1,从optr栈退出σ,形成运算指令(a1)σ(a2),计算结果进入opnd栈;
若optrTop = ch(此处特指optrTop与ch的优先级相等且ch= ')'
则从optr