如何快速判断一个四则运算公式字符串是否符合规则,且根据给定值计算出该公式的值?
双栈实现
实际上编译器就是利用了双栈实现了的表达式求值,其中一个栈用来保存操作数,另一个栈用来保存运算符。...如果遇到的运算符比运算符栈顶的元素的优先级高,就将这个运算符压入栈;
如果遇到的运算符比运算符栈顶的元素的优先级低或两者相同,就从运算符栈顶取出运算符,在从操作数栈顶取两个操作数,然后进行计算,并把计算的得到的结果压入操作数栈...如果该运算符的优先级低于运算符栈顶部运算符,则将运算符栈顶部的运算符出栈,从操作数栈中弹出两个操作数,计算结果后再入栈 operandStack ,重复此步骤直到运算符栈为空或遇到优先级高于或等于该运算符的栈顶运算符为止...如果是右括号“)”,则将运算符栈栈顶的运算符出栈,从操作数栈中弹出两个操作数计算结果,重复此步骤直到遇到左括号为止,并将这一对括号从运算符栈中移除。
重复步骤3和4,直到表达式的最右端。...将运算符栈中剩余的所有运算符依次出栈,从操作数栈中弹出两个操作数,计算结果后入栈 operandStack。
操作数栈最终只剩一个操作数,这就是表达式的计算结果。