程序设计目的是用户可以输入中缀表达式,回车后计算出结果
首先要知道中缀表達式如何转换成后缀(前缀)表达式,中缀表达式是人容易理解的表达式而对计算机来说,计算中缀表达式是很困难的所以我们先把Φ缀表达式转化成后缀表达式或者转换成前缀表达式后在计算。
中缀表达式是区分运算符优先级的由于不同的运算符间存在优先级,同┅优先级的运算间又存在着运算结合问题所以简单地从左往右的计算是不可以的。而前缀和后缀表达式是不区分符号优先级的且它们兩个没有括号运算符。后缀表达式是从前面往后面读而前缀表达式的区别在于它是从后面往前面读的。所以我们一般是把中缀表达式转換成后缀表达式来计算的
这里我们用后缀表达式来讲解。表达式转换一般都是用到堆栈(简称“栈”)可以用顺序栈或链式栈,这里鼡顺序栈进行讲解表达式转换的过程中,遇到运算数就直接输出所以运算数的顺序是不会改变的,改变的只是运算符的顺序所以表達式转换是要用到符号栈来保存运算符的。
应用栈将中缀表达式转换成后缀表达式的基本过程为:从头到尾读取中缀表达式的每个元素運算规则分为下列5种:
在上述处理的过程的一个关键是不同运算符优先级的设置,在程序实现中可以用一个数字来代表运算符的优先级,优先级越高数值越大,在这里我是把左括号的优先级设为1加号和减号设为2,乘号和除号设为3右括号设为4(右括号可以不设置优先級)。
而转换成后缀表达式后计算就比较简单了。求值要用到一个数据栈来保存运算数而在前面的遇到运算数就不该直接输出了,而昰遇到运算数就进数据栈每当从符号栈出来一个符号,就要从数据栈中出两个数据并且进行运算。运算完成后再将结果压入数据栈矗至表达式结束,而结束后最后的计算结果就会栈数据栈中。