pascal 后缀表达式

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:05:44

二、算术表达式的后缀表示

把运算符放在参与运算的两个操作数后面的算术表达式称为后缀表达式。
例如,对于下列各中缀表达式:
(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中
·如果后缀表达式未读完,就重复上面过程,最后输出栈顶的数值则为结束