数据结构与算法课程设计线索二叉树的应用_第1页
数据结构与算法课程设计线索二叉树的应用_第2页
数据结构与算法课程设计线索二叉树的应用_第3页
数据结构与算法课程设计线索二叉树的应用_第4页
数据结构与算法课程设计线索二叉树的应用_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数学与计算机学院课程设计说明书课 程 名 称: 数据结构与算法课程设计 课 程 代 码: 6014389 题 目: 线索二叉树的应用 年级/专业/班: 2010级软件1班 学 生 姓 名: 学 号: 312010080611127 开 始 时 间: 2011 年 12 月 9 日完 成 时 间: 2011 年 12 月 23 日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5) 说明书(计算书、图纸、分析报告)撰写质量(45)总 分(100)指导教师签名: 年 月 日摘 要首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。其次是概要设计,

2、说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及adt描述。然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。关键词:线索化;先序遍历;中序遍历;后续遍历引 言 数据结构是计算机专业重要的专业基础课程与核心课程之一,在计算机领域应用广泛,计算机离不开数据结构。数据结构课程设计为了能使我们掌握所学习的知识并有应用到实际的设计中的能力,对于掌握这门课程的学习方法有极大的意义。本课程设计的

3、题目为“线索二叉树的应用”,完成将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树的操作。本课程设计采用的编程环境为microsoft visual stdio 2008。目 录 1需求分析32开发及运行平台43 概要设计54 详细设计75 调试分析126 测试结果137 结论18致 谢19参考文献20附 录21 1、需求分析 为了能更熟练精准的掌握二叉树的各种算法和操作,同时也为了开拓视野,综合运用所学的知识。为此,需要将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树,以实现线索树建立、插入、删除、恢复线索等。1.1任务与分析 中次系统要实现对二叉树的建立,以及线索化该二叉树,

4、同时实现对其先序、中序、后序线索话的并输出结果。1.2测试数据 表1:入的二叉树结点序号和数据结点序号数据1 112 223 334 445 556 667778889992开发及运行平台开发平台:microsoft visual studio 2008运行平台:windows xp/2003/73 概要设计 3.1 adt描述 adt bitree 数据对象:d=“树节点”; 数据关系:rh 若d=为空,则r=,tree为空树; 若d仅有一个数据元素,则r=; 否则r=h详细描述如下:d中存在唯一的称之为根的节点root,它在关系h下无前驱;1. 若d-root,则存在对根以外剩余元素的一个

5、划分d1、 d2.,dm(m0),并对任意jk(1jm,1km)有djdk=;且对任意i(1im)唯一存在数据元素xidi,有二元关系h。这里描述的是从总节点到各个子树根节点xi的边。2. 对应于d-root的划分,关系集h-, ,.也有唯一的划分h1、h2.hm(m0),并且对任意的jk(1jm,1km)有hjhk=,对任意的i(1im),hi是di上的二元关系,则(di,h)是一颗树,且是root的子树。基本操作: void creat ();/创建一个二叉树。void inorder ();/中序便利。void thtree:threpreorder ();/先序遍历二叉树。void t

6、htree:threinorder ();/中序遍历二叉树。void thtree:threpostorder ();/后序遍历二叉树。void thtree:destroy ();/删除线索二叉树。int main();/主函数。3.2程序模块结构 图2 程序模块结构3.2.1 结构体定义书的结构体定义如下:struct threnode /定义结点结构体elemtype data; threnode *lch;threnode *rch;int ltag,rtag;3.3各功能模块新建模块: void thtree:creat ()新建二叉树并储存。树类模块:void thtree ()定

7、义书的结点,孩子以及各成员函数。先序遍历模块: void thtree:threpreorder ()对树进行先序线索遍历。中序遍历模块: void thtree:threinorder ()对树进行中序线索遍历。后序遍历模块: void thtree:threpostorder()对树进行后序线索遍历。删除模块: void thtree:destroy ():删除所有节点。4详细设计4.1结构体定义树的结构体定义如下:struct threnode /定义结点结构体thretype data; threnode *lch;threnode *rch;int ltag,rtag;4.2 初始化

8、构造函数初始化变量,定义双亲结点和左右标志域以及根结点:void thtree:creat() /建立二叉树 threnode *q,*s20; elemtype x; int i,j; coutn请按二叉树的层序自上而下自左至右顺序组织数据endl; coutn每次输入结点的序号和数据,假设根结点值是11;endl; coutn那么输入应该是:1 11endl; coutix; while(i!=0&x!=0)q=new threnode; /产生一个接点q-data=x;q-lch=null;q-rch=null;q-ltag=0;q-rtag=0; /左右标志域si=q;if(i=1)r

9、oot=q; /q为根接点elsej=i/2;if(i%2)=0)sj-lch=q;else sj-rch=q; /j为双亲结点编号coutix; 4.3 新建操作void thtree:creat() /建立二叉树threnode *q,*s20; elemtype x; int i,j;coutn请按二叉树的层序自上而下自左至右顺序组织数据endl;coutn每次输入结点的序号和数据,假设根结点值是11;endl;coutn那么输入应该是:1 11endl;coutix;while(i!=0&x!=0)q=new threnode; /产生一个接点q-data=x;q-lch=null;q

10、-rch=null;q-ltag=0;q-rtag=0; /左右标志域si=q;if(i=1)root=q; /q为根接点elsej=i/2;if(i%2)=0)sj-lch=q;else sj-rch=q; /j为双亲结点编号coutix; void thtree:threpreorder(threnode *p,threnode *pre) /先根线索化二叉树if(p!=null)coutdatalch=null)p-lch=pre; p-ltag=1; pre=p; if(p-ltag=0)threpreorder(p-lch,pre); threpreorder(p-rch,pre);

11、4.4、录入信息int main ()int k;thtree root0;docoutnn;coutnn 1.建立二叉树;coutnn 2.中序递归线索二叉树;coutnn 3.先序线索化二叉树 ;coutnn 4.后续线索化二叉树;coutnn 5.结束程序运行;coutk;switch(k)4.5先序遍历线索化操作void thtree:threpreorder(threnode *p,threnode *pre) /先根线索化二叉树if(p!=null)coutdatalch=null)p-lch=pre; p-ltag=1; pre=p; if(p-ltag=0)threpreord

12、er(p-lch,pre); threpreorder(p-rch,pre);4.6中序遍历线索化操作void thtree:threinorder(threnode *p,threnode *pre) /中根线索化二叉树if(p!=null)threinorder(p-lch,pre);p-lch=pre;p-ltag=1;if(pre!=0&pre-rch=0)pre-rch=p;pre-rtag=1;pre=p;threinorder(p-rch,pre);4.7后续遍历线索化操作void thtree:threpostorder(threnode *p,threnode *pre) /

13、后根线索化二叉树if(p!=null)threpostorder(p-lch,pre); threpostorder(p-rch,pre);coutdatalch=null)p-lch=pre;p-ltag=1;pre=p;4.8主函数int main ()int k;thtree root0;docoutnn;coutnn 1.建立二叉树;coutnn 2.中序递归线索二叉树;coutnn 3.先序线索化二叉树 ;coutnn 4.后续线索化二叉树;coutnn 5.结束程序运行;coutk;switch(k)case 1:coutn 建立二叉树:;root0.creat();break;

14、case 2:coutn 中序递归线索二叉树的结果:; root0.threinorder(); break; case 3:coutn 先序递归线索二叉树的结果:; root0.threpreorder();break; case 4:cout=0&k5);_getch(); return 0;5 调试分析5.1测试数据测试数据见表1.5.2调试问题 在测试过程中没有给测试者提供相关的录入信息要求,导致录入要求不合格,程序不能正常运行,经过添加了录入信息提示之后就解决了这个问题。5.3算法时间复杂度录入:时间复杂度为o(n);先根线索化二叉树: 时间复杂度为o(n);中根线索化二叉树: 时间

15、复杂度为o(n);后根线索化二叉树: 时间复杂度为o(n);删除结点: 时间复杂度为o(n);5.4经验和体会在本次课程设计中主要是对图的数据结构操作,所有刚开始对知识不是很熟悉操作起来有一定难度,容易在程序的关键地方但经过翻阅教材能较好的解决问题。6测试结果6.1录入信息 图3 录入信息界面6.2新建模块 图5 查询景点信息界面6.3中序递归线索化模块 图6 中序递归线索化界面6.4先序递归线索化模块图7 先序递归线索化界面6.5后序递归线索化模块 图8 后序递归线索化界面结 论 本次课程设计“二叉树的线索化”按照任务书相应的要求成功的完成了任务,由于本课程设计涉及先序、后序、中序的线索化,

16、以及相应的相关插入删除的操作,因此对算法的设计以及相关函数的调用要求很高,需要通过反复的查看相关书籍才能完成。 致 谢 在本次课程设计过程中,首先感谢辅导老师周立章,在数据结构课堂上为课程设计需要的前期知识打下了基础,在课程设计过程中抽出休息时间来做相应的课程设计指导。同时在这次课程设计中,也要感谢许多乐意同学对我不懂的地方的指导和耐心讲解。参考文献 1 严蔚敏,吴伟民.数据结构.北京.清华大学出版社出版。 2 严蔚敏,吴伟民. 数据结构题集(c语言版) .北京.清华大学出版社.2003年5月。3 杨秀金,数据结构(c+版) .北京.高等教育出版社.2009年4月。4 朱战立.数据结构(c+语

17、言描述)(第二版本).北京.高等出版社出版.2004年4月。5 胡学钢.数据结构(c语言版) . 北京.高等教育出版社. 2004年8月。6 杨金秀.数据结构(c语言版).西安.电子科技大学出版社.2004年8月。 西华大学本科课程设计说明书规范化要求第一条说明书格式说明书(或计算书)手写、打印均可,需采用统一的课程设计用纸或模版。纸张大小a4,上下右各留2.2cm,左边距2.5cm的页边距。手写时用黑墨水工整书写;打印:1.5倍行距,正文字体使用小四号宋体,小标题使用小四号黑体,大标题使用四号黑体,章节标题使用小三号黑体、居中。页眉按“ xxxxxx(课程设计题目)”(5号)注写,但封面不能有页眉;页脚居中。第二条 课程设计说明书字数要求按学院根据本学科特点确定的字数。 第三条 装订课程设计资料装订顺序为:(1)封面(2)任务书(由指导教师填写)(3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论