请教一个把后缀式转换为中缀式的算法。。。

nick_lhy 2011-01-07 12:48:46
请教一个把后缀式转换为中缀式的算法,要求用栈实现,我在网上找了半天,都是中缀转后缀的代码,请求大神们给个算法吧
...全文
226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nick_lhy 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 litaoye 的回复:]

直接按照后缀表达式的计算方法,不算值了,而是把符号加到中间,括号加到两边,然后入栈就行了。
[/Quote]这样我能够做到,但是还想实现省略不需要的括号的功能。。。比如 1 2 * 3 +,应该输出
1*2+3,关于省略不需要的括号我实在纠结啊。。
绿色夹克衫 2011-01-08
  • 打赏
  • 举报
回复
直接按照后缀表达式的计算方法,不算值了,而是把符号加到中间,括号加到两边,然后入栈就行了。
nick_lhy 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhaolinger2 的回复:]

引用 4 楼 nick_lhy 的回复:
我就是这样写的,结果些出来以后括号实在看着恶心,关于各种运算符号优先级控制括号的省略实在感觉麻烦。。。

可以这样:

放入栈中的时候放ApB,然后在后面再放一个p。
等到下一个运算符q被读出来后,从栈中连续取元素,直到读满两个非运算符元素为止。
有以下几种情况:
(以E表示非运算符,以p表示运算符)
1、EE 表示两个元素都是单纯的……
[/Quote]谢谢了,我去试一试!
zhaolinger2 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nick_lhy 的回复:]
我就是这样写的,结果些出来以后括号实在看着恶心,关于各种运算符号优先级控制括号的省略实在感觉麻烦。。。[/Quote]

可以这样:

放入栈中的时候放ApB,然后在后面再放一个p。
等到下一个运算符q被读出来后,从栈中连续取元素,直到读满两个非运算符元素为止。
有以下几种情况:
(以E表示非运算符,以p表示运算符)
1、EE 表示两个元素都是单纯的运算元素,直接EqE和q(两个)依次重新放回;
2、pEE或EpE或pEpE p后面紧跟着的那个元素是复合元素,即由单纯的运算元素和运算符重新组合过的元素。此时,拿p和q做运算符优先级判定,举个例子:

pEE:
如果p<q,则将(E)qE和q分别压入栈;
如果p>=q,则将EqE和q分别压入栈。
nick_lhy 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhaolinger2 的回复:]

伪代码:

中缀串Dst
后缀串Src(已赋初值)
空栈Stack
从头到尾遍历Src,直到串尾为止
{
取出一个字符,将其作为一个元素p
判断p性质
如果p为非运算符
{
压入栈
}
如果p为运算符
{
从栈顶连续得到两个元素A,B
将(ApB)组成新的元素C(包……
[/Quote]我就是这样写的,结果些出来以后括号实在看着恶心,关于各种运算符号优先级控制括号的省略实在感觉麻烦。。。
nick_lhy 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lx3275852 的回复:]

关键在于加括号!~
[/Quote]对,就是各种运算符号的优先级麻烦
zhaolinger2 2011-01-07
  • 打赏
  • 举报
回复
伪代码:

中缀串Dst
后缀串Src(已赋初值)
空栈Stack
从头到尾遍历Src,直到串尾为止
{
取出一个字符,将其作为一个元素p
判断p性质
如果p为非运算符
{
压入栈
}
如果p为运算符
{
从栈顶连续得到两个元素A,B
将(ApB)组成新的元素C(包括左右的两个括号)
将C重新压入栈中
}
}
最后栈中剩下的唯一一个元素就是所求

这个方法能保证取到合适的中缀串,不足就是可能添加有比较多的括号。
lx3275852 2011-01-07
  • 打赏
  • 举报
回复
关键在于加括号!~

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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