后缀表达式(笔试遇到这个东西,查查记录一下)
m(n+p)-q 👉 mnp+q-
利用栈,从左到右扫描:
1.遇到数字直接输出
2.遇到运算符,若栈为空,则直接进栈,若栈不为空,和栈顶符号比较优先级(乘除大于加减),该运算符优先级低于栈顶符号优先级,则栈中元素依次出栈,并将该元素入栈。
3.遇到左括号入栈
4.遇到右括号,栈中元素出栈,知道弹出的为左括号,括号在后缀表达式中输出
5.最后将栈中元素依次出栈
以上式为例:(以【】代表栈)
m*(n+p)-q
第一个元素m直接输出
后缀表达式:m
栈 【】
第二个元素*,栈为空,入栈【*】
后缀表达式:m
栈 【*】
第三个元素左括号入栈
后缀表达式:m
栈 【*】
第四个元素n输出
后缀表达式:mn
栈 【* (】
第五个元素+,栈顶元素为(,(我认为括号应该是遇到右括号才比较优先级),所以入栈
后缀表达式:mn
栈 【* ( +】
第六个元素p,输出
后缀表达式:mnp
栈 【*】
第七个元素右括号,将栈中元素左括号之后的元素依次出栈
后缀表达式:mnp+
栈 【*】
第八个元素-,优先级低于*,所以栈中元素*出栈,-入栈
后缀表达式:mnp+*
栈 【-】
第九个元素q,输出
后缀表达式:mnp+*q
栈 【-】
最后输出栈中元素
后缀表达式:mnp+*q-
请各位大佬指正