网站大量收购独家精品文档,联系QQ:2885784924

中缀表达式转化成后缀表达式计算.docVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
中缀表达式转化成后缀表达式计算

目 录 一、设计思想……………………………………………………….01 二、算法流程图…………………………………………………….02 三、源代码………………………………………………………….03 四、运行结果……………………………………………………….16 五、遇到的问题及解决…………………………………………….17 六、心得体会……………………………………………………….18 一、设计思想 第一种算法 先把算术表达式转化成后缀表达式,在对后缀表达式进行计算。 首先建立一个符号栈,用于存放字符和字符的优先级别;然后在建立一个数栈,用于辅助后缀表达式的计算;最后在定义一个字符串数组,用于存放后缀表达式。建立一个计算的函数,该函数用于两个数的计算,在调用这个函数的时候,传入三个参数,两个浮点型参数和一个字符型参数,根据不同的符号进行不同的计算。定义一个判断优先级别的函数,用于判断两个操作符的优先级别,在根据优先级的不同决定不同的操作。 后缀表达式的取得,对算术表达式字符串进行挨个的扫描,如果是数字或者是小数点, 则将数字或者小数点存放到字符数组中,每取完一个数字,则在后面用“|”隔开,如果是操作符,则和栈中得操作符进行比较,若扫描到的符号优先级比栈里的符号优先级低,则栈中元素出栈并存放到字符数组中。每出一个字符到字符数组中就在后面加“|”分隔。继续检查栈顶比较优先级,直到栈中元素优先级比扫描到的符号优先级低或者符号栈为空,则将此操作符入栈。若是“(”则无条件入字符栈,若是“)”则从字符栈中出字符直到遇到“(”为止。当字符数组扫描到最后的时候,计算并没有结束。然后得进行字符栈的判断,看是否已经为空栈,若不是空栈,则出栈字符,将字符存放到数组中。最后字符串数组中存放的就是后缀表达式。得到后缀表达式后,要用数栈进行后缀表达式的计算,后缀表达式的计算中,对新的数组进行从道到尾的扫描,如果遇到数字,以“|”为标记取出完整的操作数,用辅助数组存放,然后转化成浮点数存放到数栈中,遇到“|”则直接将数组下标往后走。遇到字符,则从数栈取出两个数进行计算,将计算的结果从新存放到数栈中,循环直到接到结束。最后存放在数栈中的数就是计算的结果。最后在主函数中调用此函数,进行结果的输出。 第二种算法 对表达式直接进行计算,也称为边走边计算 首先建立一个符号栈,用于存放字符和字符的优先级别;然后建立一个数栈,用于存放数。建立一个计算的函数,该函数用于两个数的计算,在调用这个函数的时候,传入三个参数,两个浮点型参数和一个字符型参数,根据不同的符号进行不同的计算。定义一个判断优先级别的函数,用于判断两个操作符的优先级别,在根据优先级的不同决定不同的操作。 边走边计算实现,扫描算术表达式,如果遇到数字或者是小数点,则进行循环的扫描直到将整个数字从字符数组中取出,把取出的字符存放到一个数组中,在利用c语言的函数把这个字符串的数字转化成浮点型的数字,然后存放到数栈中,若果是字符,则将字符的优先级与字符栈中的字符优先级进行比较,若优先级别低于字符栈中的符号优先级别,则从字符栈中取出操作符,再从数栈中取出两个数字,进行计算,计算的结果存放到数栈中,继续检查符号栈中的元素直到遇到优先级别比扫描到的字符优先级别低或者符号栈为空,将扫描到的符号入栈。。若是“(”则无条件入字符栈,若是“)”则从字符栈中出栈字符从数栈中取数进行计算,直到遇到“(”为止。当字符数组扫描到最后的时候,计算并没有结束。然后得进行字符栈的判断,看是否已经为空栈,若不是空栈,则出栈字符,每出栈一个字符就出栈两个数字,进行计算,直到字符栈空为止。最终存放在数栈中的数就是计算的结果。最后在主函数中调用此函数,进行结果的输出。 二、算法流程图 第一种算法:先将中缀表达式转化成后缀表达式,然后计算。 图1中缀转后缀流程图 图 2 后缀表达式的计算 图 3 直接计算中缀表达式 三、源代码 先将中缀表达式转化成后缀表达式,在进行后缀表达式的计算,最后将结果显示。 下面给出的是用第一种算法实现的的程序的源代码: #include stdio.h #include stdlib.h #include string.h //创建存放字符的结构体 typedef struct { char ch; //定义ch 存放操作符 int level; //定义level 存放操作符的优先级 }OpNode; //创建字符栈 typedef struct { OpNode opNode[100]; int top; //存放栈顶的数 int size; //存放当前栈的大小 }OpStack; //对字符栈的初始化 voi

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档