表达式的计算主要思路是先将表达式转换为逆波兰式,然后用逆波兰式计算。为了简单的说明逆波兰式是怎么计算的,这里的算术表达式只包含+-*/四种运算,也没有括号,也没有考虑第一个数为负的情况,所以很简单。
1.计算逆波兰表达式:输入为一个算术表达式,以=结束,然后计算其逆波兰表达式。想法很简单,定义优先级,*/的优先级要高于+-,建立一个运算符栈。顺序扫描表达式,如果是数的话,输出。如果是运算符,判断当前的操作符和栈顶的操作符的优先级,如果当前运算符的优先级大于栈顶运算符的优先级,将当前运算符入栈;反之将栈顶的操作符输出,然后当前的操作符入栈;遇到=时将弹出栈中所有操作符。比如2+3*4+3=:1.输出2;2.将+入栈;3.输出3;4.*>+,将*入栈;5.输出4;遇到+,输出*,+,然后将+入栈。6.输出3;7.输出+.
最后输出为:234*+3+
2.计算逆波兰表达式。思路:如果是数,入栈,如果是运算符,弹出两个操作符,进行操作,将操作结果入栈。如上所述234*+3+,步骤为:2入栈,3入栈,4入栈,遇到*,将4和3弹出,计算结果为12,将12入栈,+将12和2弹出,计算14,将14入栈,遇到3,将3入栈,遇到+将3和14弹出,计算。结果为17。
以下是一个具体实现: