- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计11939new.doc
黑龙江大学
《数据结构课程设计》读书报告
学 院 计算机科学与技术学院 年 级 2010 专 业 计算机科学与技术 学 号 座机电话号码 姓 名 刘曈霖 日 期 2011年12月2日星期五 成 绩 黑龙江大学计算机科学技术学院
黑龙江大学软件学院
一、基本理论阐述
1.算术表达式求解算法
任何一个表达式都是有操作数(operand)运算符(operator)。和界限符组成的,我们称他们为单词。一般地,操作数既可以是常数也可以是被说明为变量或常量的表示符;运算符可以分为算数运算符,关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束等。
我们根据算数四则运算的规则:
先乘除,后加减;
从左算到右;
先括号内,后括号外;
在每一步运算中,任意的两个相继出现的运算符θ1和θ2之间的优先关系至多是下面三种关系之一。大于,小于,等于;
这里我们不给出各个运算符的优先级关系。具体情况参考《数据结构》。
我们直接给出算法:
为实现算符优先算法,可以使用两个工作栈。一个称做OPTR,用于寄存运算符;另外一个称作OPND,用于寄存操作数或运算结果。算法的基本思想是:
首先置操作数栈为空栈,表达式其实符“#”为运算符栈的栈底元素;
一次读入表达式中的每个字符,若使操作数则进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求解完毕
2. 最小生成树算法
I. Prim算法:
假设N V, E 是连通网,TE是最小生成树变得集合。
算法从U u0 (u0属于V),TE 开始,重复执行下述操作:在所有u属于U,v属于V-U的边(u,v)属于E中找到一条代价最小的边(u0,v0)并入集合TE,同时v0并入U直至U V为止。此时TE中必有n-1条边,则T V, TE
为N的最先生成树。
图为Prim算法生成最小生成树的过程。 图1. prim算法构造最小生成树的过程
我们可以看出Prim的算法核心策略是贪心。
II.Kruskal算法:
假设 WN V, E 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含 n 个顶点,而边集为空的子图,若将该子图中各个顶点看成是各棵树上的根结点,则它是一个含有 n 棵树的一个森林。之后,从网的边集 E 中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,也就是说,将这两个顶点分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至森林中只有一棵树,也即子图中含有 n-1条边为止。 图2.Kruskal算法生成最小树的过程。
由此可见Kruskal算法的核心策略也是贪心算法。
二、当前应用现状 两种算法的应用都非常的广泛,表达式求解算法在制作计算器是经常会使用到。而最小生成树的应用则是更加的广泛。在我们的日常生活中经常可以看见。比如题中的铺设电网问题等等。
三、对XXXX部分的体会 学习一个算法,不紧紧是学习他是如何实现的, 更需要学习它的思想,感受算法的魅力。比如生成树中运用了非常多的思想,贪心,枚举,排序等等一系列基础思想。但是用这些思想我们就能解决一个大问题。这难道不是一件非常美妙的事情么。就像变魔术一样。只有你想不到的,没有你做不到的。
四、课程设计过程中的应用与实践
I.表达式求解算法
1 问题描述及分析
要求以字符序列的形式从键盘输入语法正确的、不含变量的整数表达式,实现对算术四则混合运算表达式的求值。
需要用两个堆栈来实现这个目的。一个称做OPTR,用于寄存运算符另外一个称作OPND,用于寄存操作数或运算结果。
(2)功能模块及数据结构描述
首先: 用char型变量定义运算符栈optr。用double型变量定义数据栈opnd。
分别有两个指针top1,top2;
和各自的出栈,入栈函数;
其次:
分别有change char a 函数,将运算符装换成数字,方便查找优先级;
operate double a,double b,char c 函数,对出栈的a和b做相应的运算;
bool w()函数,判断读入的字符是否是数字,返回值是bool型的;
bool tony 函数,用于判断表达式是否正确。
然后:
主要工作函数double work ,其中主要做了如下操作:
如果扫描到了数字,则入数据栈。其中可以分辨出多位的数字和double型数据。
扫描到运算符。则和栈顶做比较:
如果栈顶优先级高,将数据栈退栈两个数据,字符栈退栈一个数据,然后做相应的运算。并将运算结果入栈。不接受下一个字符。
如果栈定优先级低,就将运算符入栈。并
您可能关注的文档
最近下载
- 2024生成式AI赋能教育未来.docx VIP
- 2025年《药品经营质量管理规范》(gsp)版药店零售版幻灯片PPT.pptx
- 科技赋能教育AI技术在学科教学中的运用及对未来教育趋势的影响.docx VIP
- 2025-2030年中国二氢吡啶行业投资价值研究报告.docx
- 未来教育趋势AI赋能教育新篇章.docx VIP
- 教师专业基本能力测试题答案(供参考).pdf VIP
- 最全学科带头人教学能手选拔理论试题及答案(教师基本素养试题).doc VIP
- 离婚协议书样本(可打印).docx VIP
- 智启未来,育见新篇——AI赋能教育教学的探索 课件.pptx VIP
- 小猪佩奇第一季1-51集的重点词组讲解PeppaPig(学习笔记).pdf VIP
文档评论(0)