中缀算术表达式求值
题目
输入一个中缀算术表达式,计算其结果。对输入的表达式,做如下假设:
() 只考虑、、、这四种运算符,中缀表达式中只有一种括号();
()输入的中缀表达式中数字只有整数,没有小数;
()假定输入表达式是合法的。
算法
基本思路:设置两个工作栈,都为链栈,一个存储操作数,一个存储运算符。
然后输入想要求解的表达式,表达式不正确则需要重新输入,最后输出结果
主要的两个工作函数的基本算法
函数
)遍历输入的字符串
)当遇到操作数时,操作数进操作数栈
)当遇到运算符时,判断其是否为( ,是则进入 ),不是则进入 )
)如果后面跟的是操作数或者是( 都入栈,直到遇到第一个非( 的运算
符将其压入运算符栈
)当该运算符是否为且栈顶元素为( 两者满足将栈顶元素(弹出
)取出该运算符的标志位,与栈顶元素的标志位比较,若该运算符的标志
位大则该运算符进栈,否则进行 操作,直到该运算符为且
栈顶元素为时,将结果输出
函数
从操作数栈中弹出两个量 ,从运算符栈中弹出一个量 ,通过判断
是四则运算中的哪个将 和 进行运算,并将运算结果压入操作数栈
中
注意:这里运算符的优先级别是这样规定的