一、设计思想计算算术表达式可以用两种方法实现: 1
中缀转后缀算法 此算法分两步实现:先将算术表达式转换为后缀表达式,然后对后缀表达式进行计算
具体实现方法如下:(1)中缀转后缀 需要建一个操作符栈 op 和一个字符数组 exp,op 栈存放操作符,字符数组用来存放转换以后的后缀表达式
首先,得到用户输入的中缀表达式,将其存入 str 数组中
对 str 数组逐个扫描,假如是数字或小数点,则直接存入 exp 数组中,当扫描完数值后,在后面加一个#作为分隔符
假如是操作符,并且栈为空直接入栈,假如栈不为空,与栈顶操作符比较优先等级,若比栈顶优先级高,入栈;假如比栈顶优先级低或相等,出栈将其操作符存到exp 数组中,直到栈顶元素优先等级低于扫描的操作符,则此操作符入栈;假如是左括号,直接入栈,假如是右括号,出栈存入 exp 数组,直到遇到左括号,左括号丢掉
然后继续扫描下一个字符,直到遇到 str 中的结束符号\0,扫描结束
结束后看 op 栈是否为空,若不为空,继续出栈存入 exp 数组中,直到栈为空
到此在 exp 数组最后加结束字符\0
我们就得到了后缀表达式
(2)后缀表达式计算此时需要一个数值栈 od 来存放数值
对 exp 数组进行逐个扫描,当遇到数字或小数点时,截取数值子串将其转换成 double 类型的小数,存入 od 栈中
当遇到操作符,从栈中取出两个数,进行计算后再放入栈中
继续扫描,知道扫描结束,此时值栈中的数值就是计算的结果,取出返回计算结果
两个栈实现算法 此算法需要两个栈,一个值栈 od,一个操作符栈 op
将用户输入的数学表达式存入 str 数组中,对其数组进行逐个扫描
当遇到数字或小数点,截取数值子串,将其转换成 double 类型的数值存入 od 栈中;当遇到左括号,直接入 op 栈;遇到右括号,op 栈出栈,再从值栈 od 中取出两个数