中缀表达式计算
双栈法(数字栈和运算符栈)
1.从前向后遇见数字就压入数字栈
2.遇见左括号压栈
3.遇见右括号则弹出数字栈顶两个数字,和一个运算符栈一个运算符进行计算,直至遇见左括号,退括号,计算结果压栈
4.遇见运算符,若符号栈顶的元素小于当前运算符优先级,则入栈;若相等或大于则数字弹出俩,符号弹出一个计算,直至符号栈顶元素优先级小于当前运算符,入栈当前运算符;
注意各个运算符号的优先级:
除法 4 乘法 3 减法 2 加法 1
这里将除法的优先级高于乘法是要处理 6 / 3 * 6的问题,减法也类似,处理 2 - 6 + 3 的问题
也可以将中缀表达式转化为后缀表达式进行计算
规则:
从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;
若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。
左括号直接入栈,比较优先级时左括号优先级低于加减乘除