逆波兰式基本信息

中文名称 逆波兰式 外文名称 Reverse Polish notation,RPN
又称 后缀表达式 使用方式 将运算符写在操作数之后

实现逆波兰式的算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序。

逆波兰式造价信息

市场价 信息价 询价
材料名称 规格/型号 市场价
(除税)
工程建议价
(除税)
行情 品牌 单位 税率 供应商 报价日期
定制卡扣 卡扣安装 查看价格 查看价格

光联照明

13% 上海光联照明有限公司
沟槽式法兰 DN80 查看价格 查看价格

银羊

13% 江苏银羊不锈钢管业有限公司
沟槽式法兰 DN150 查看价格 查看价格

银羊

13% 江苏银羊不锈钢管业有限公司
定制卡扣 定制, 查看价格 查看价格

江苏明朗

13% 江苏明朗照明科技有限公司
定制卡扣 紧固扣件 查看价格 查看价格

大峡谷

13% 大峡谷照明系统(苏州)股份有限公司
定制卡扣 定制款 查看价格 查看价格

佛山银河照明

13% 佛山市银河兰晶科技股份有限公司
沟槽式法兰 DN100 查看价格 查看价格

银羊

13% 江苏银羊不锈钢管业有限公司
沟槽式法兰 DN200 查看价格 查看价格

银羊

13% 江苏银羊不锈钢管业有限公司
材料名称 规格/型号 除税
信息价
含税
信息价
行情 品牌 单位 税率 地区/时间
自行铲运机 斗容量7m3 查看价格 查看价格

台班 汕头市2012年4季度信息价
自行铲运机 斗容量12m3 查看价格 查看价格

台班 汕头市2012年4季度信息价
自行铲运机 斗容量12m3 查看价格 查看价格

台班 汕头市2012年3季度信息价
自行铲运机 斗容量7m3 查看价格 查看价格

台班 汕头市2012年2季度信息价
自行铲运机 斗容量10m3 查看价格 查看价格

台班 汕头市2012年1季度信息价
自行铲运机 斗容量10m3 查看价格 查看价格

台班 汕头市2011年4季度信息价
自行铲运机 斗容量16m3 查看价格 查看价格

台班 汕头市2011年4季度信息价
自行铲运机 斗容量12m3 查看价格 查看价格

台班 汕头市2011年3季度信息价
材料名称 规格/需求量 报价数 最新报价
(元)
供应商 报价地区 最新报价时间
渗透膜 20000G 渗透(RO膜)|2根 1 查看价格 深圳安贝康水处理设备技术开发有限公司    2015-04-15
组串交器 MAC 70KTL3-X MV,直流最大功率91KW,交流最大输出功率77.7KW ,最高转换效率达98.8%,宽MPPT电压范围:(200-1000V)宽工作温度范围-25-+60℃.|8块 1 查看价格 华煦光伏科技有限公司 广西   2022-07-04
变模块 WEUP-5KVA-220V|1块 3 查看价格 北京网元鼎信科技有限公司 全国   2021-05-08
隔膜缓止回阀 法兰300X DN150|7079个 1 查看价格 上海沪航阀门有限公司 上海  上海市 2015-05-27
隔膜缓止回阀 法兰300X DN200|9536个 1 查看价格 上海沪航阀门有限公司 上海  上海市 2015-09-25
隔膜缓止回阀 法兰300X DN65|4917个 1 查看价格 上海沪航阀门有限公司 上海  上海市 2015-05-22
隔膜缓止回阀 法兰300X DN100|6822个 1 查看价格 上海沪航阀门有限公司 上海  上海市 2015-04-13
变模块 WEUP-5KVA-220V|1块 1 查看价格 珠江瓦特电力设备有限公司 全国   2021-06-08

新建一个表达式,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。

将一个普通的中序表达式转换为逆波兰表达式的一般算法是:

首先需要分配2个栈,一个作为临时存储运算符的栈S1(含一个结束符号),一个作为输入逆波兰式的栈S2(空栈),S1栈可先放入优先级最低的运算符#,注意,中缀式应以此最低优先级的运算符结束。可指定其他字符,不一定非#不可。从中缀式的左端开始取字符,逐序进行如下步骤:

(1)若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入S2栈

(2)若取出的字符是运算符,则将该运算符与S1栈栈顶元素比较,如果该运算符优先级大于S1栈栈顶运算符优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,最后将该运算符送入S1栈。

(3)若取出的字符是"(",则直接送入S1栈顶。

(4)若取出的字符是")",则将距离S1栈栈顶最近的"("之间的运算符,逐个出栈,依次送入S2栈,此时抛弃"("。

(5)重复上面的1~4步,直至处理完所有的输入字符

(6)若取出的字符是"#",则将S1栈内所有运算符(不包括"#"),逐个出栈,依次送入S2栈。

完成以上步骤,S2栈便为逆波兰式输出结果。不过S2应做一下逆序处理。便可以按照逆波兰式的计算方法计算了!

逆波兰式常见问题

  • 什么叫非可逆式 可逆式交流接触器

    可逆接触器可逆型接触器是一种用于控制较大功率电机正、反转的机械可逆交流接触器,由两台标准型接触器和一个机械互锁单元构成,集中了交流接触器及倒顺开关的优点,操作简单、安全可靠、成本低,主要用于电机的正反...

  • 接触器可逆式与不可逆式是指什么意思,请懂的人指点啊!

    可逆式接触器就是由一对不可逆的接触器组合而成,可实现电机的正向和反向控制,所以就称为可逆式,而不可逆式接触器就是指我们常用的单个式接触器,只能实现电机的单向控制。希望能帮到你!

  • 求解波兰蜜蜡好吗

    波兰琥珀的最大特点是银镶。因为波兰金矿并不丰富,所以波兰政府严格限制用金子镶嵌珠宝,这样也大大降低了琥珀饰品的价格,使得更多的人有机会接触这样独特美妙的宝石。镶金的琥珀一般是俄罗斯的。镶银的琥珀不仅仅...

一个表达式E的后缀形式可以如下定义:

(1)如果E是一个变量或常量,则E的后缀式是E本身。

(2)如果E是E1 op E2形式的表达式,这里op是如何二元操作符,则E的后缀式为E1'E2' op,这里E1'和E2'分别为E1和E2的后缀式。

(3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。

如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+

(a+b)*c-(a+b)/e的后缀表达式为:

(a+b)*c-(a+b)/e

→((a+b)*c)((a+b)/e)-

→((a+b)c*)((a+b)e/)-

→(ab+c*)(ab+e/)-

→ab+c*ab+e/-

下面以(a+b)*c为例子进行说明:

(a+b)*c的逆波兰式为ab+c*,假设计算机把ab+c*按从左到右的顺序压入栈中,并且按照遇到运算符就把栈顶两个元素出栈,执行运算,得到的结果再入栈的原则来进行处理,那么ab+c*的执行结果如下:

1)a入栈(0位置)

2)b入栈(1位置)

3)遇到运算符"+",将a和b出栈,执行a+b的操作,得到结果d=a+b,再将d入栈(0位置)

4)c入栈(1位置)

5)遇到运算符"*",将d和c出栈,执行d*c的操作,得到结果e,再将e入栈(0位置)

经过以上运算,计算机就可以得到(a+b)*c的运算结果e了。

逆波兰式除了可以实现上述类型的运算,它还可以派生出许多新的算法,数据结构,这就需要灵活运用了。逆波兰式只是一种序列体现形式。

数据结构版

int precede(char op)

{ int x;

switch(op)

{

case '*': x=2; break;

case '/': x=2; break;

case '+': x=1; break;

case '-': x=1; break;

default : x=0;

}

return x;

}

char *RPExpression(char *e)

{/* 返回表达式e的逆波兰式 */

char *c;

c=(char*)malloc(sizeof(char)*20); //不能用char c[]

Stack s1;

InitStack(s1);

int i=0,j=0;

char ch;

Push(s1,'@');

ch=e[i++];

while(ch!= 0)

{

if(ch=='(')

{

Push(s1,ch);

ch=e[i++];

}

else if(ch==')')

{

while(Top(s1)!='(')

{

Pop(s1,c[j++]);

}

/* to[j++]=pop(&s1);*/

Pop(s1,ch);

ch=e[i++];

}

else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')

{

char w;

w=Top(s1);

while(precede(w)>=precede(ch))

{

Pop(s1,c[j++]);

w=Top(s1);

}

Push(s1,ch);

ch=e[i++];

}

else

{

//while((ch<='z'&&ch>='a')||(ch<='Z' && ch>='A')){

c[j++]=ch;

ch=e[i++];

//}

//c[j++]=' ';

}

}

Pop(s1,ch);

while(ch!='@')

{

c[j++]=ch;

Pop(s1,ch);

}

//c[j++]=;

c[j++]=0;

return c;

}

还有一种方法,用2叉树.

其中△代表一个标识,ω代表预算法,名字Q代表变量(如int a,b等),

算法用到三个栈:a栈,b栈,in栈。

其中a栈用来存储逆波兰式,b用来存储△号和运算符,in栈为输入栈。

第一竖排为b栈中符号,第一横排为输入栈中符号。

pop(in)为输入栈栈顶元素出栈,pop(a,Q)为Q入a栈,NEXT算法即为进行下一轮循环,其中ω1<ω2为算符优先级,如"+"和"-"<"*"和"/"。pop(b,B),push(b,B)中B为临时变量,用来存储出栈的元素。stop为算法结束。

算法开始时,现将△如b栈,输入栈以#号结尾。

?

输入流

b[s-1]

名字Q?

(

ω2

)?

#

POP(in);

PUSH(a,Q)

NEXT

POP(in);

PUSH(b,△)

NEXT

POP(in)

PUSH(b,ω2)

NEXT

POP(in)

POP(b,B)?NEXT

STOP

ω1

POP(in)

PUSH(a,Q)?

NEXT

POP(in)

PUSH(b,△)

NEXT

若ω1<ω2,则

POP(in)

PUSH(b,ω2)

NEXT?

若ω1≥ω2,则POP(in)

POP(b,B),

PUSH(a,B)

POP(b,B)

PUSH(a,B)

POP(b,B)

PUSH(a,B)

将最终进行的运算符记为根节点,将两边的表达式分别记为左右子树,依次进行直到所有的运算符与数字或字母标在一棵二叉树上。然后对二叉树进行后序遍历即可。

逆波兰式文献

逆波兰表达式在VB中的算法设计与实现 逆波兰表达式在VB中的算法设计与实现

格式:pdf

大小:922KB

页数: 3页

评分: 4.6

在计算机中执行算术表达式的计算是通过栈来实现的。编译系统不考虑表达式的优先级别,只是对表达式从左到右进行扫描,找到运算符和操作数,完成运算。本文以VB为开发平台,利用数组实现顺序栈工作原理,将中缀表达式转化为逆波兰表达式,便于计算。

立即下载
球式止逆阀 球式止逆阀

格式:pdf

大小:922KB

页数: 1页

评分: 4.4

维普资讯 http://www.cqvip.com

立即下载

具有破碎比大,生产能力高,产品粒度均匀等特点。产品结构先进,性能可靠,工作平稳,能耗低。东辰生产的锤式破碎机已形成系列,深受国内外用户欢迎。锤式破碎机分可逆式和不可逆式两种,可逆式锤式破碎机的转子可逆,一般用于细碎;不可逆式锤式破碎机的转子不可逆,一般用于中碎。

逆境逃避(stress avoidance)和逆境忍耐(stress tolerance),逆境逃避指由于植物通过各种方式摒拒逆境的影响,不利因素并未进入组织,故组织本身通常不会产生相应的反应。逆境忍耐指植物虽经受逆境影响,但它通过反应而抵抗逆境,在可忍耐的范围内,逆境所造成的损伤是可逆的,即植物可以恢复其正常生长;如果超过植物可忍范围,损伤将变成不可逆的,超出植物自身修复能力,植物将受害甚至死亡。

主要有阀体,摇杆,阀盖,阀座,密封座等组成,工作时,气体在一定压力作用下顶开阀盖由进气口进入止逆阀内,由出口流出,当空气压力突然减小时,阀盖在摇杆的带动下,自动将阀座盖住,起到密封作用,这样气体不会倒流。

逆波兰式相关推荐
  • 相关百科
  • 相关知识
  • 相关专栏