- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构之中缀表达式转后缀表达式[精品]
我们在数学中常见的计算式,例如2+(3*4)叫做中缀表达式。表达式中涉及到了多个运算符,而运算符之间是有优先级的。计算机在计算并且处理这种表达式时,需要将中缀表达式转换成后缀表达式,然后再进行计算。中缀表达式转后缀表达式遵循以下原则:1.遇到操作数,直接输出;2.栈为空时,遇到运算符,入栈;3.遇到左括号,将其入栈;4.遇到右括号,执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出;5.遇到其他运算符+-*/时,弹出所有优先级大于或等于该运算符的栈顶元素,然后将该运算符入栈;6.最终将栈中的元素依次出栈,输出。经过上面的步骤,得到的输出既是转换得到的后缀表达式。举例:a+b*c+(d*e+f)*g --------- abc*+de*f+g*+遇到a,直接输出:遇到+,此时栈为空,入栈:遇到b,直接输出:遇到*,优先级大于栈顶符号优先级,入栈:遇到c,输出:遇到+,目前站内的*与+优先级都大于或等于它,因此将栈内的*,+依次弹出并且输出,并且将遇到的这个+入栈:遇到(,将其入栈:遇到d,直接输出:遇到*,由于*的优先级高于处在栈中的(,因此*入栈:遇到e,直接输出:遇到+,栈顶的*优先级高于+,但是栈内的(低于+,将*出栈输出,+入栈:遇到f,直接输出:遇到),弹出栈顶元素并且输出,直到弹出(才结束,在这里也就是弹出+输出,弹出(不输出:遇到*,优先级高于栈顶+,将*入栈:遇到g,直接输出:此时已经没有新的字符了,依次出栈并输出操作直到栈为空:明白了这个过程,现在就需要用代码实现了。对于各种运算符的优先级,可以使用整数来表示运算符的级别。可以定义一个函数来返回各种符号的优先级数字:/******************************************************************根据字符该字符是否在栈中,返回该字符的优先级。*这里只处理+、-、*、/、(、)这些符号。*需要注意的是:如果(在栈中,它的优先级是最低的,不在栈中则是最高的*@param c:需要判断的字符*@param flag:字符是否在栈中,0表示在栈中,1表示不在栈中*****************************************************************/int GetPrecedence(char c,int flag){if(c==+ || c==-){return 1;}else if(c==* || c==/){return 2;}else if(c==( flag==0){return 0;}else if(c==( flag==1){return 3;}else{fprintf(stderr,Input char is invalid!\n);return -1;}}/*****************************************************************判断一个字符是不是运算符*如果是合法的运算符+、-、*、/、(、)则返回0,否则返回1****************************************************************/int IsOperator(char c){if(c==+||c==-||c==*||c==/||c==(||c==)){return 0;}else{return 1;}}/*****************************************************************完整的代码如下:****************************************************************/#include stdio.h#include stdlib.h#define ElementType chartypedef struct Node *PtrToNode;typedef PtrToNode Stack;typedef struct Node{ElementType Element;PtrToNode Next;};int IsEmpty(Stack S);Stack CreateStack();void DisposeStack(Stack S);void MakeEmpty(Stack S);void Push(ElementType X,Stack S);ElementType Top(Stack S);void Pop(Stack S);//判断栈是否为空int IsEmpty(Stack S){return S-Next == NULL;}//创建链栈Stack Crea
您可能关注的文档
- 数学广角搭配的学问课件(小学三年级数学课件)[精品].ppt
- 数学建模 垃圾分类处理与清运方案设计方案[精品].doc
- 数学建模《降落伞的选购问题》[精品].doc
- 数学同步练习题考试题试卷教案第八章 第一节 空间几何体的结构、三视图和直观图、表面积和体积[精品].doc
- 数学二年级上册教学参考多媒体资源-北京雷锋小学[精品].ppt
- 数学建模优秀论文_垃圾分类处理与清运方案设计[精品].doc
- 数学同步练习题考试题试卷教案高三数学三角函数与平面向量[精品].doc
- 数学建模知识[精品].doc
- 数学建模《降落伞的选购问题》.doc[精品].doc
- 数学建模基础知识 线性规划-单纯形方法[精品].ppt
最近下载
- 足皮肤感染的护理PPT课件.pptx VIP
- 超翔充电桩竣工验收报告.docx VIP
- 铁路450M无线列调通信系统.ppt VIP
- 人工智能生成合成内容标识办法解读培训讲座PPT课件.pptx VIP
- 基于5G技术的2025动车组智能运维平台建设成果汇报设计稿.pptx VIP
- 《火灾自动报警系统设计规范GB50116-2013》.doc VIP
- 基于5G技术的2025高速铁路智能运维管理平台建设方案PPT架构.pptx VIP
- 《ISO IEC 29100-2024信息技术-安全技术-隐私框架》专业解读与应用实践指导材料(雷泽佳编制-2024)_1-114.docx VIP
- 金蝶KIS标准版的安装及操作手册.pdf VIP
- Q_CR 604-2017 CTCS-3级列控系统无线通信功能接口规范.docx VIP
文档评论(0)