2014年考研数据结构辅导(11)
Exp=a*b+(c-d/e)*f 若 Exp=a*b+(c-d/e)*f 则它的 前缀式为: +*ab*-c/def 中缀式为: a*b+c-d/e*f 后缀式为: ab*cde/-fx+ 综合比较它们之间的关系可得下列结论: 1.三式中的 “操作数之间的相对次序相同”; (二叉树的三种访问次序中,叶子的相对访问次序是相同的) 2.三式中的 “运算符之间的的相对次序不同”; 3.中缀式丢失了括弧信息,致使运算的次序不确定; (而前缀和后缀运算只需要一个存储操作数的栈,而中缀求值需要两个栈,符号栈和操作数栈) 4.前缀式的运算规则为:连续出现的两个操作数和在它们之前且紧靠它们的运算符构成一个最小表达式; 5.后缀式的运算规则为: ·运算符在式中出现的顺序恰为表达式的运算顺序; ·每个运算符和在它之前出现且紧靠它的两个操作数构成一个最小表达式; 6.中缀求值的运算规则: 如果是操作数直接入栈。 如果是运算符。这与当前栈顶比较。个如果比当前栈顶高,则入栈,如果低则说明当前栈顶是最高的必须把他先运算完了。用编译原理的话就是说当前栈顶已经是最左素短语了) 其实中缀表达式直接求值和把中缀表达式转化成后缀表达式在求值的过程惊人的相似,只不过是直接求值是求出来,而转化成后缀是输出来。 |