2016 - 2024

感恩一路有你

表达式转换成逆波兰式 一般算术表达式转化为逆波兰式?

浏览量:1331 时间:2021-03-14 16:44:21 作者:admin

一般算术表达式转化为逆波兰式?

表达式e后缀形式的定义:(1)如果e是变量或常量,则e的后缀形式为e本身;(2)如果e是E1*E2的形式(其中*表示任何二进制运算),则e的后缀形式为e“1 e”2*,e“1和e”2分别为E1和E2的后缀表达式;(3) 如果e是(E1)形式的表达式,那么e的后缀表达式就是E1的后缀表达式。所以波兰语表达式的倒装与运算符的优先级无关。具体算法比较困难,要使用DAG图或三元图,这是编译原理中使用较多的。根据逆波兰表达式计算相对简单。堆栈用于依次将字符串读入堆栈。遇到运算符时,将堆栈顶部的两个元素取出进行操作,并将操作结果推入堆栈,直到读取整个字符。

假设表达式由单字母变量和双目四则运算符构成。写一个算法,把一个表达式转换为逆波兰式?

算法如下:char*rpexpression(char*e)/*返回表达式e*/{char M=“0”char*B stack s static char a[100]B=a initstack(s)push(s,M)if(*e){while(*e){switch(*e){case”(“:{push(s),*e)break}case“:case”-“:{M=top(s)if(M=”| M=“-”){pop(s,M)*b=M}else if(M==”*“| M==”/”){pop(s,M)while(M!=“(”&&;amp;amp;amp;amp;amp!“0 ”0{0 {0 {0 {0{0{0 {0{”0{0{0{0}{0}{b=m Pop(s、m)b=m Pop(s、m)b=m Pop(s、m)}[u)如果(m)假如(m)假如(m===“0”推(s、m)推(s、s、e)断裂)推动}打破}本}个案}案例{案例}案例{案例}案例“::个案::::::::“:::个案{个案{个案=m if(m==“(”| | m==“0”)Push(s,m)Push(s,*e)}break}case”“:{Pop(s,m)while(m!=“(”{*b=m Pop(s,m)}break}默认:{*b=*e break}e}Pop(s,m)while(m!=“0”{*b=m Pop(s,m)}*b=“0”b=a return b}}

表达式转换成逆波兰式 逆波兰式计算过程 逆波兰式计算例题

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。