中缀表达式转后缀表达式

基本要求:输入一行无空格的中缀表达式,输出一个后缀表达式,两项之间以空格分隔

核心思想:当下只解决过去的问题,而把当下的问题记下来留给未来。和递归做一个对比,递归的核心思想是,遇到什么问题解决什么问题,不管什么时候的。

具体分析:

参考这篇博文我们发现,转换不影响数字的次序,我们只需考虑何时输出运算符即可。

因此,当遇到数字时,就可以直接输出。

当遇到运算符时,情况复杂一些:

思路1:我们希望,当我输出这个运算符的时候,他的左右两个作用对象都已经被输出了。

问题:我怎么知道啥时候右作用是什么?现在还没读入右对象呢,当然没法知道(现在不是递归,递归的话我们可以知道),因此这个策略行不通,我们需要曲线救国。

思路2:把(左对象,运算符,右对象)看做一个新的对象,只要不太靠后,他一定是某个运算符的左对象,于是我们把搞定这个对象的艰巨任务交给下一个运算符。每当遇到一个运算符后,我们都要先搞定左对象完成了输出即可。(如果右边没有新的对象了,直接输出运算符)

问题:我怎么知道当前运算符的左对象是谁?

思路3:先考虑表达式,假设没有括号,那么从当前位置往前走,遇到第一个运算优先级低于当前运算符的运算符时停下来,那么这段区间就是左对象。

问题:万一有括号呢?答:把括号里的东西看成表达式,原来是遇到换行符终止,现在是遇到右括号终止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值