小女子还是不太理解前缀表达式转后缀表达式,求大神指点迷津。。

lovezaxyt 2012-05-23 08:21:22
翻了很多资料,结果几乎都是C/C++的,之前也有大神指点过。
理论上好像有点明白了,真到写代码又不会了。。。
我知道前缀转后缀就是树的后序遍历。
能不能请大神们写点代码再次帮助我理解一下。。。。
灰常感谢各位。。。
...全文
225 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovezaxyt 2012-05-24
  • 打赏
  • 举报
回复
总算搞定了,多谢大神SP1234...

PS:另外也多谢4楼虽然没帮上什么,参与有奖。。。哈哈哈
lovezaxyt 2012-05-23
  • 打赏
  • 举报
回复
我理解的是前缀表达式 / + a b c 压入栈后 弹出的是 c b a + / ,这样就是完成了前缀转后缀了么?

AI观星台 2012-05-23
  • 打赏
  • 举报
回复
我觉得楼主既然是在学数据结构,只要懂得什么是栈就行了。
不用非得纠结于前缀还是后缀表达式,那更是编译原理词法分析的内容。
尤其更不用纠结于怎么用C#来实现了。
  • 打赏
  • 举报
回复
“堆栈数据如何读取”这不是问题。你知道 a + b / c 这样压入的数据读取时就是 c / b + a 这样数据去弹出,就是全面地了解堆栈操作了。然后你使用这个知识设计“计算表达式值”的流程(你可以画一个流程图来说明计算过程),每一个步骤都是简明不含糊的,这就是目的。
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

额。。。貌似我才自学一个月,接触的语言也只有C#。。。
至于书籍,选的是《数据结构与算法C#语言版》,外加传智播客.net的入门视频
楼上的意思是不是要设一个优先级,(为最先,然后/*-+,然后读到)的时候把这些符号压入另一个栈里面么,那数栈如何读取呢?

PS,我只是想设计一个类,在类里面实现一个字符串类似于“- + a b c”的前缀表达式转成"a b + c -"的后缀表达式
[/Quote]

如果牵扯到优先级就,就不是“前缀、中缀、后缀”的问题了,就是语法分析问题了。就像你PS中所列的,“前后缀”转换就是锻炼你的基本数据结构(堆栈)与简单算法的结合编程能力,是非常简单的小程序。
lovezaxyt 2012-05-23
  • 打赏
  • 举报
回复
T T
自己顶
lovezaxyt 2012-05-23
  • 打赏
  • 举报
回复
额。。。貌似我才自学一个月,接触的语言也只有C#。。。
至于书籍,选的是《数据结构与算法C#语言版》,外加传智播客.net的入门视频
楼上的意思是不是要设一个优先级,(为最先,然后/*-+,然后读到)的时候把这些符号压入另一个栈里面么,那数栈如何读取呢?

PS,我只是想设计一个类,在类里面实现一个字符串类似于“- + a b c”的前缀表达式转成"a b + c -"的后缀表达式
purui5210 2012-05-23
  • 打赏
  • 举报
回复
学过编译原理里面的算符优先文法分析吗?
对于(a - b) / c这个式子
首先需要建立一个优先级的表:类似于 / > -这样的。
记住一点,读入的为操作数时,直接放入操作数栈,读入符号时,要和符号栈顶部的符号做优先级比较。
操作数栈:
符号栈:# //开始为#,设定#的优先级小于任何符号
考察第一个字符:( 由于( > #,读入
操作数栈:
符号栈:#(
第二个:a 直接读入
操作数栈:a
符号栈:#(
第三个:- 这儿你要明白-是大于(的,左括号的优先级应该大于#
操作数栈:a
符号栈:#( -
第四个:b 直接读入
操作数栈:a b
符号栈:#( -
第五个:) 这里想想也会明白,右括号的优先级应该是大于任何符号的,由于)> -,说明要运算了
操作数栈:a b
符号栈:#( -
因此输出后缀式的第一部分:a b -,在输出之后,栈变为:
操作数栈:a-b的结果
符号栈: # (
这时,由于)并未读入,所以还要再考察)和符号栈的栈顶符号,
这里会用到一个默认设定,就是左括号遇到右括号的时候,两个都放弃。栈变为:
操作数栈: a-b的结果
符号栈:#
之后的步骤就是重复的了,这个很好理解,
如果你理解到了,但是不会写代码的话,
说明你擅长用你学到的语言来把这个问题转化为计算机可以实现的代码!
然鸟 2012-05-23
  • 打赏
  • 举报
回复
不懂楼主的需求到底是什么?
董小宠 2012-05-23
  • 打赏
  • 举报
回复


嘿嘿 。
lovezaxyt 2012-05-23
  • 打赏
  • 举报
回复
自己顶一下
0-0

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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