一、算术表达式的中缀表示
把运算符放在参与运算的两个操作数中间的算术表达式称为中缀表达式。例如:2+3*4 - 6/9
算术表达式中包含了算术运算符和算术量(常量、变量、函数),而运算符之间又存在着优先级,不能简单地进行从左到右运算,编译程序在求值时,不能简单从左到右运算,必须先算运算级别高的,再算运算级别低的,同一级运算才从左到右。在计算机中进行中缀表达式求值较麻烦。而后缀表达式求值较方便(无须考虑运算符的优先级及圆括号)。
二、算术表达式的后缀表示
把运算符放在参与运算的两个操作数后面的算术表达式称为后缀表达式。
例如,对于下列各中缀表达式:
(1)3/5+8
(2)18-9*(4+3)
对应的后缀表达式为:
(1)3 5 / 8 +
(2)18 9 4 3 + * -
转换规则:把每个运算符都移到它的两个操作数的后面,然后删除掉所有的括号即可.
三 表达式的计算:
由于后缀表达式中没有括号,不需判别优先级,计算严格从左向右进行,故计算一个后缀表达式要比计算机一个中缀表达式简单得多。
将中缀表达式转换为后缀表达式的算法思想:
·当读到数字直接送至输出队列中
·当读到运算符t时,
a.将栈中所有优先级高于或等于t的运算符弹出,送到输出队列中;
b.t进栈
·读到左括号时总是将它压入栈中
·读到右括号时,将靠近栈顶的第一个左括号上面的运算符全部依次弹出,送至输出队列后,再丢弃左括号。
中缀表达式全部读完后,若栈中仍有运算符,将其送到输出队列中
运用后缀表达式进行计算的具体做法:
·建立一个栈S
·从左到右读后缀表达式,读到数字就将它转换为数值压入栈S中,读到运算符则从栈中依次弹出两个数分别到Y和X,然后以"X 运算符 Y"的形式计算机出结果,再压加栈S中
·如果后缀表达式未读完,就重复上面过程,最后输出栈顶的数值则为结束
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=619852