中缀表达式转后缀表达式

qq_36041879 2018-09-15 11:05:24
-A+B-C+D 大神们讲讲这个中缀表达式怎么转后缀,手工打算就行不需要代码,重点是最前面的负号怎么处理
...全文
355 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
林多 2018-09-19
  • 打赏
  • 举报
回复
中缀表达式(如:-A+B-C+D),求后缀表达式,遇到负数,可以这么处理。
第一种:
遇到“-”时,先判断是负号还是减号:
1. 如果上一个符号是 “(”,那么是负号。
2. 如果上一个符号是“)”,那么是减号。
3. 如果是表达式的第一个符号,那么是负号。
4. 如果上一符号是运算符,那么是负号。
5. 如果上一个符号是数字,那么是减号。

判断后,如果是负号,则连同后面的数字,一并当成数字处理。
特殊情况 -(-A) + B,如果“-”是第一个符号,并且后面是"(",则需要追加处理,继续重复上面的处理。如之前那种情况,最后判断为A(正)
如果是减号,则当成符号处理。

第二种:
这种比较简单啦,像第一种一样判断,是负号还是减号。如果是负号,先插入一个数字0,然后把该负号当成”减号“一样处理即可。


之后,延用后缀表达式的常规求法(这块资料很多了)。
qq_36041879 2018-09-17
  • 打赏
  • 举报
回复
引用 2 楼 a3192048的回复:
后缀为:A-B+C-D+
1)如果遇到数字,我们就直接将其输出。

2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。

3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。

4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "。

5)如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
能细说一下这题关于手工算法的步骤吗
啊大1号 2018-09-16
  • 打赏
  • 举报
回复
后缀为:A-B+C-D+
1)如果遇到数字,我们就直接将其输出。

2)如果遇到操作符,则我们将其放入到栈中,遇到左括号时我们也将其放入栈中。

3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。注意,左括号只弹出并不输出。

4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止。弹出完这些元素后,才将遇到的操作符压入到栈中。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "。

5)如果我们读到了输入的末尾,则将栈中所有元素依次弹出。
zy010101 2018-09-16
  • 打赏
  • 举报
回复
为什么要处理负号,他还是个数啊!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧