中缀表达式计算

双栈法(数字栈和运算符栈)

1.从前向后遇见数字就压入数字栈

2.遇见左括号压栈

3.遇见右括号则弹出数字栈顶两个数字,和一个运算符栈一个运算符进行计算,直至遇见左括号,退括号,计算结果压栈

4.遇见运算符,若符号栈顶的元素小于当前运算符优先级,则入栈;若相等或大于则数字弹出俩,符号弹出一个计算,直至符号栈顶元素优先级小于当前运算符,入栈当前运算符; 

 注意各个运算符号的优先级:

除法 4  乘法 3  减法 2 加法 1

这里将除法的优先级高于乘法是要处理 6 / 3 * 6的问题,减法也类似,处理 2 - 6 + 3 的问题

也可以将中缀表达式转化为后缀表达式进行计算

规则:

从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;

若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。

左括号直接入栈,比较优先级时左括号优先级低于加减乘除

原文地址:https://www.cnblogs.com/userrain/p/8930211.html