首页 > 试题广场 >

已知一算数表达式的中缀表达式为 a-(b+cd)*e,其后

[填空题]
已知一算数表达式的中缀表达式为 a-(b+c/d)*e,其后缀形式为1
链接:https://www.nowcoder.com/questionTerminal/c7ad3a55dea74c9d935f63d3c9f78a96?source=relative
来源:牛客网
中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。
对于a-(b+c/d)*e:    [ 输出,入栈]
[a,  ] [a,-] [a,(-]  [ab,(-]  [ab,+(-]  [abc,+(-]  [abcd,/+(-]   [abcd/+,-]    [abcd/+e,-]     [abcd/+e*-]
发表于 2018-01-10 16:24:54 回复(0)

将中缀表达式“a-(b+c/d)*e”转换为后缀表达式的过程如下:


扫描到的元素


S2(栈底->栈顶)数字

S1 (栈底->栈顶)操作符

说明

a

a

数字,直接入栈

-

a

-

S1为空,运算符直接入栈

(

a

-(

(,直接入栈

b

ab

-(

数字,直接入栈

+

ab

-(+

S1,栈顶为左括号,运算符直接入栈

c

abc

-(+

数字,直接入栈

/

abc

-(+/

/比+优先级高,则直接压栈

d

abcd

-(+/

数字,直接入栈

)

abcd/+

-

右括号,弹出运算符到s2直至遇到左括号

*

abcd/+

-*

*比+优先级高,则直接压栈

e

abcd/+e

-*

数字直接入栈

到达最右端

abcd/+e*- 弹出s1中剩余的运算符

结果为:abcd/+e*-








发表于 2018-03-25 18:24:35 回复(0)
不想用栈的话试试表达式树,简洁明了
发表于 2018-04-27 10:55:07 回复(0)