数据结构与算法(Python语言描述)课件表达式的求值_第1页
数据结构与算法(Python语言描述)课件表达式的求值_第2页
数据结构与算法(Python语言描述)课件表达式的求值_第3页
数据结构与算法(Python语言描述)课件表达式的求值_第4页
数据结构与算法(Python语言描述)课件表达式的求值_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

表达式求值,中缀:A+B*(C-D)-E/F优先级高的运算符先计算;优先级相同的自左向右计算;先括号内,后括号外;后缀:ABCD-*+EF/运算符没有优先级,运算次序自左向右;运算符的两个运算数是其之前的最后两个;,中缀和后缀的表达式,附设运算数栈;依次读入表达式的每一“项”,若是数,则将其压栈若是符,则:连续从栈中退出两个操作数b和a计算ab并将计算结果压栈当表达式处理结束时,栈顶(唯一元素)是计算结果。,后缀表达式的求值,defsuffix_evaluator(exp):operators=+-*/st=SStack()#存已读入的运算数forxinexp:ifnotxinoperators:st.push(float(x)else:b=st.pop()a=st.pop()c=calculate(a,x,b)#子表达式“归约”st.push(c)returnst.top(),后缀表达式求值算法,计算时机:读入新的运算符时,若其优先级比前面最后读入的运算符的优先级低时,则前一个运算符可与当前已读入的最后的两个运算数计算;两处“最后读入的先处理”(LIFO),故附设两个栈:运算数栈运算符栈,中缀表达式的求值,优先级表:C版课本P53。表示:#y是栈顶符,x是当前读入符defprecede(y,x):ify=+x=tokensiwhilest_optr.top()!=#x=tokensielse:运算符的处理returnst_opnd.top(),中缀表达式求值算法,y=st_optr.top()ifafterybeforex:y=st_optr.pop()b=st_opnd.pop()a=st_opnd.pop()c=calculate(a,y,b)#继续处理x,而不是读入新的xelse:st_optr.pop()#此时是左右括号碰头,弹出左括号i+=1;x=tokensi,运算符的处理,后缀表达式操作数的排列次序同中缀表达式故不需附设栈存运算数,遇数则直接输出;运算符的输出时机同中缀表达式的计算时机;附设栈保存以读入但未处理的运算符;输出时机:当前符的优先级低于符栈栈顶运算符时,栈顶运算符可输出。,中缀表达式转换为后缀表达式,definffix_to_suffix(tokens):operators=“()+-*/“st_optr=SStack()#存已读入的运算符exp=st_optr.push(#)#总有一个优先级最低的垫底i=0;x=tokensiwhilest_optr.top()!=#x=tokensielse:运算符的处理returnexp,中缀表达式转换为后缀表达式算法伪码,y=st_optr.top()ifafterybeforex:y=st_optr.pop()#计算的时机即输出时机exp.append(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论