设为首页 - 加入收藏
广告 1000x90
您的当前位置:黄大仙一二三份资料 > 精简窗口 > 正文

中缀表达式到前后缀表达式的转换精简新窗口

来源:未知 编辑:admin 时间:2019-07-28

  表达式的计算在计算机中执行算术表达式的计算是通过栈来实现的。 算术表达式有三种表示: 中缀(infix):〈操作数〉〈操作符〉〈操作数〉例A+B 前缀(prefix):〈操作符〉〈操作数〉〈操作数〉例+AB 后缀(postfix):〈操作数〉〈操作数〉〈操作符〉例AB+ 平时所使用的表达式均是中缀表示例: 为正确执行中缀表达式的计算必须明确各个操作符的执行顺序。 c++中操作符的优先级 C++中规定表达式中相邻的两个操作符的计算顺序 为:优先级高的先计算,如优先级相同按自左向右计算。 由于中缀表示有优先级的问题,所以对编译器来说, 一般不用中缀表示,解决方法为用后缀表示和前缀表示, 后缀表示用一个栈,前缀、中缀用两个栈表示,所以编译 程序一般使用后缀表示求表达式的值。 R1R4 R2 R3 R5 R1R4 R2 R3 R5 表达式计算顺序 后缀表达式计算顺序 利用后缀表示计算表达式的值 后缀表示称为(RPN)逆波兰记号,是中缀的替代 形式,参加运算的操作数总在操作符的前面。 利用后缀表示求解表达式的值时,从左向右顺序扫 描表达式,并用一个栈暂存扫描到的操作数或计算结果。 通过后缀表示求值过程为:顺序扫描表达式的每一 项,然后根据它的类型作如下操作:如果是操作数,则 压栈,如是操作符(OP),在连续从栈中退出两个操作 数Y和X形成运算指令X(OP)Y,并将运算结果压入栈, 当表达式的所有项都扫描完并处理完后栈顶放的就是最 后的运算结果。 例如:后缀表达式 ABCD-*+EF/- 的计算过程为: 扫描项项类型 动作 栈中内容 操作符D、C退栈,计算C-D,结果R1进栈 ABR1 操作符R1、B退栈,计算R2=B*R1,R2进栈 AR2 操作符R2、A退栈,R3=A+R2 ,R3进栈 R3 R3E10 R3EF11 ,R4进栈R3R4 12 操作符R3、R4退栈 R5=R3-R4 R5进栈 R5 中缀表示与其他表示之间的转换 11、使用括号法将中缀表示转为前缀或后缀表示 、使用括号法将中缀表示转为前缀或后缀表示 将中缀转为前缀: 将中缀转为前缀: 首先对中缀表达式按运算优先级通通加上括号,在把运 算符前移到左括号前并以就近的移动为原则,最后将括号 去掉。 将中缀表示转为后缀表示:首先将中缀表达式按运算优先级加上括号,再把操作符 移到右括号的后面并以就近移动为原则,最后将括号削去。 ((((AB)+D)*--(E/(F+(AD)*)))+C)(E/(F+(AD)*)))+C) ((((AB)+D)*--(E/(F(AD)*)+))+C)(E/(F(AD)*)+))+C) ((((AB)+D)*--(E(F(AD)*)+)/)+C)(E(F(AD)*)+)/)+C) 2、利用栈将中缀表示转为后缀显示1、操作符栈初始化,将结束符‘;’进栈。读入中缀表达式字符流的 首字符CH 2、重复执行以下步骤,直到CH=‘;’,停止循环 若CH是操作数直接输出,读入下一个字符CH 若CH是操作符,判断CH的优先级ICP和当前位于栈顶的操作符OP 的优先级ISP; 若ICP(CH)〉ISP(OP)令CH进栈,读下个CH 若ICP(CH)〈ISP(OP)退栈不输出 若ICP(CH)==ISP(CH),退栈不输出,若退出的是‘(’, 读入CH. 算法结束,输出序列即为所需的后缀表达式。 操作符CH 扫描项项类型 动作 栈变化 输出 操作符ISP(‘;’)

  ICP(‘)’)退栈 ABCD-ISP(‘(‘)==ICP(‘)’)退栈 ABCD-10 操作符ISP(‘*’)

  ICP(‘-’)退栈 ABCD-*ISP(‘+’)==ICP(‘-’)退栈 ABCD—*+ISP(‘;’)

  ICP(‘;’) ABCD—*+EF/ISP(‘-’)

  ICP(‘;’)退栈 ABCD—*+EF/-结束 3、使用括号法将前缀表示或后缀表示转换为 中缀 将前缀表示转为中缀表示 首先适当地以操作符+操作数的方式对原表达式加 括号,然后由内向外将各操作符移到紧接它右边的括号 后,最后去掉所有括号。 例:前缀-+*+ABD/E+F*ADC转为中缀 的过程为: 后缀表示转换为中缀表示将后缀表示转为中缀表示 首先适当地以操作数+操作符的方式对原表达式加括号, 然后将各操作符移到紧接它前面的左括号前,最后去掉 所有括号。 例:AB+D*EFAD*+/-C+ 将以下中缀表达式转换成前缀和后缀表达式,然后再转换成中缀表达式:

本文链接:http://vendor-lock.com/jingjianchuangkou/544.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top