首页 > 编程知识 正文

前中后缀表达式,后缀表达式怎么求值

时间:2023-05-06 11:42:43 阅读:44312 作者:291

在概念关联连接后缀式的评价中,用后缀的变换用后缀式构建表达式树

概念关联

后缀(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 * *。 (堆栈从左向右延伸)

因为前两个符号是操作数,所以创建两个单节点树,然后将指向它们的指针推入堆栈。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。