在概念关联连接后缀式的评价中,用后缀的变换用后缀式构建表达式树
概念关联
后缀(postfix )也称为逆波兰表示法(reverse Polish notation )。
后缀表达式评估http://www.Sina.com/http://www.Sina.com/:遇到一个数时推入堆栈; 遇到操作员时,操作员作用于从堆栈弹出的两个数,将得到的结果推入堆栈。
例如,后缀表达式: 6523 8* 3 *
前四个数字放入堆栈中,此时堆栈为(右边为堆栈顶部) )
6 | 5 | 2 | 3 | | | | |
读下一个号码,3和2从堆栈中跳出计算,他们的和5被推入堆栈。
6 | 5 | 5 | | | | | |
接着进入8堆栈
6 | 5 | 5 | 8 | | | | |
现在读*号,8和5跳出来,8*5=40进入堆栈
6 | 5 | 40 | | | | | |
这样重复,以下仅示出过程堆栈图
6|45|||||||||| |
6 | 45 | 3 | | | | | |
6|48||||||||||
288||||||||||||
从骑马钉到后缀的转换只允许运算符“”、“*”、“(”、“)”。 “)”在进入堆栈之前优先级最高,在堆栈中优先级最低。当一个表达式以后缀记法给出时,无需知道任何优先规则。:按顺序读取字符。 阅读算法描述时,立即将其放入输出; 在阅读算法描述“”、“*”和“()”之一时,使元素开枪直到从堆栈中发现优先级较低的元素,然后再击中该3358www.Sina.com/; 阅读操作数“”时,弹出元素直到遇到对应的“”。操作符:堆栈代表挂起的操作符进栈。 在当前运算符进入堆栈之前,必须弹出堆栈中优先级高或相等的运算符来完成计算。
例如,骑马订式: aB*c(d*ef ) g
转换为后缀的表达式是a b c * d e * f g *。 流程如下:
用后缀表达式构造表达式树操作符:类似于后缀评估算法,逐个符号地读取表达式。 如果符号为算法思想,请创建单个节点树并将其推入堆栈。 如果是操作符,则从堆栈中弹出两棵树T1和t2(T1先弹出,左右儿子分别为T2和T1 )形成以根为操作员的新树,并将该新树推入堆栈中。
例如,后缀表达式: a b c d e * *。 (堆栈从左向右延伸)
因为前两个符号是操作数,所以创建两个单节点树,然后将指向它们的指针推入堆栈。