造价通

反馈
取消

热门搜词

造价通

取消 发送 反馈意见

逆波兰式算法图示

2018/06/19174 作者:佚名
导读: 其中△代表一个标识,ω代表预算法,名字Q代表变量(如int a,b等),算法用到三个栈:a栈,b栈,in栈。其中a栈用来存储逆波兰式,b用来存储△号和运算符,in栈为输入栈。第一竖排为b栈中符号,第一横排为输入栈中符号。pop(in)为输入栈栈顶元素出栈,pop(a,Q)为Q入a栈,NEXT算法即为进行下一轮循环,其中ω1<ω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)

*文章为作者独立观点,不代表造价通立场,除来源是“造价通”外。
关注微信公众号造价通(zjtcn_Largedata),获取建设行业第一手资讯

热门推荐

相关阅读