




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年4月19日线索二叉树课程设计说明书模板文档仅供参考数学与计算机学院课程设计说明书课程名称:数据结构与算法课程设计课程代码:6014389题目:线索二叉树的应用年级/专业/班:级软件1班学生姓名:学号:31开始时间:年12月9日完成时间:年12月23日课程设计成绩:学习态度及平时成绩(30)技术水平与实际能力(20)创新(5)说明书(计算书、图纸、分析报告)撰写质量(45)总分(100)指导教师签名:年月日摘要首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及ADT描述。然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。关键词:线索化;先序遍历;中序遍历;后续遍历
引言数据结构是计算机专业重要的专业基础课程与核心课程之一,在计算机领域应用广泛,计算机离不开数据结构。数据结构课程设计为了能使我们掌握所学习的知识并有应用到实际的设计中的能力,对于掌握这门课程的学习方法有极大的意义。本课程设计的题目为“线索二叉树的应用”,完成将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树的操作。本课程设计采用的编程环境为MicrosoftVisualStdio。
TOC\o"1-2"\h\z目录TOC\o"1-2"\h\z1需求分析 32开发及运行平台 43概要设计 54详细设计 75调试分析 126测试结果 137结论 18致谢 19参考文献 20附录 21
1、需求分析为了能更熟练精准的掌握二叉树的各种算法和操作,同时也为了开拓视野,综合运用所学的知识。为此,需要将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树,以实现线索树建立、插入、删除、恢复线索等。1.1任务与分析中次系统要实现对二叉树的建立,以及线索化该二叉树,同时实现对其先序、中序、后序线索话的并输出结果。1.2测试数据表1:入的二叉树结点序号和数据结点序号数据111222333444555666777888999
2开发及运行平台开发平台:MicrosoftVisualStudio运行平台:WindowsXP//7
3概要设计3.1ADT描述ADTBiTree{数据对象:D={“树节点”};数据关系:R={H}若D=∮为空,则R=∮,Tree为空树;若D仅有一个数据元素,则R=∮;否则R={H}详细描述如下:D中存在唯一的称之为根的节点root,它在关系H下无前驱;若D-{root}≠∮,则存在对根以外剩余元素的一个划分D1、D2,Dm(m>0),并对任意j≠k(1≦j≦m,1≦k≦m)有Dj∩Dk=∮;且对任意i(1≦i≦m)唯一存在数据元素xi∈Di,有二元关系<root,xi>∈H。这里描述的是从总节点到各个子树根节点xi的边。对应于D-{root}的划分,关系集H-{<root,x1>,<root,x2>,<root,xm>}也有唯一的划分H1、H2Hm(m>0),而且对任意的j≠k(1≦j≦m,1≦k≦m)有Hj∩Hk=∮,对任意的i(1≦i≦m),Hi是Di上的二元关系,则(Di,{H})是一颗树,且是root的子树。基本操作:voidcreat();//创立一个二叉树。voidinorder();//中序便利。voidThTree::threpreorder();//先序遍历二叉树。voidThTree::threinorder();//中序遍历二叉树。voidThTree::threpostorder();//后序遍历二叉树。voidThTree::destroy();//删除线索二叉树。intmain();//主函数。}3.2程序模块结构图2程序模块结构结构体定义书的结构体定义如下:structThreNode//定义结点结构体{ ElemTypedata;ThreNode*lch; ThreNode*rch; intltag,rtag;};3.3各功能模块新建模块:voidThTree::creat()新建二叉树并储存。树类模块:voidThTree()定义书的结点,孩子以及各成员函数。先序遍历模块:voidThTree::threpreorder()对树进行先序线索遍历。中序遍历模块:voidThTree::threinorder()对树进行中序线索遍历。后序遍历模块:voidThTree::threpostorder()对树进行后序线索遍历。删除模块:voidThTree::destroy():删除所有节点。
4详细设计4.1结构体定义树的结构体定义如下:structThreNode//定义结点结构体{ ThreTypedata;ThreNode*lch; ThreNode*rch; intltag,rtag;};4.2初始化构造函数初始化变量,定义双亲结点和左右标志域以及根结点:voidThTree::creat()//建立二叉树{ ThreNode*q,*s[20];ElemTypex;inti,j; cout<<"\n请按二叉树的层序自上而下自左至右顺序组织数据"<<endl; cout<<"\n每次输入结点的序号和数据,假设根结点值是11;"<<endl; cout<<"\n那么输入应该是:111"<<endl; cout<<"\ni,x="; cin>>i>>x; while(i!=0&&x!=0) { q=newThreNode;//产生一个接点 q->data=x;q->lch=NULL;q->rch=NULL; q->ltag=0;q->rtag=0;//左右标志域 s[i]=q; if(i==1)root=q;//q为根接点 else{j=i/2; if((i%2)==0)s[j]->lch=q;elses[j]->rch=q;//j为双亲结点编号 } cout<<"\ni,x=";cin>>i>>x;}}4.3新建操作voidThTree::creat()//建立二叉树{ ThreNode*q,*s[20];ElemTypex;inti,j; cout<<"\n请按二叉树的层序自上而下自左至右顺序组织数据"<<endl; cout<<"\n每次输入结点的序号和数据,假设根结点值是11;"<<endl; cout<<"\n那么输入应该是:111"<<endl; cout<<"\ni,x="; cin>>i>>x; while(i!=0&&x!=0) { q=newThreNode;//产生一个接点 q->data=x;q->lch=NULL;q->rch=NULL; q->ltag=0;q->rtag=0;//左右标志域 s[i]=q; if(i==1)root=q;//q为根接点 else{j=i/2; if((i%2)==0)s[j]->lch=q;elses[j]->rch=q;//j为双亲结点编号 } cout<<"\ni,x=";cin>>i>>x;}}voidThTree::threpreorder(ThreNode*p,ThreNode*pre)//先根线索化二叉树{if(p!=NULL){cout<<p->data<<"";if(p->lch==NULL){p->lch=pre;p->ltag=1; } pre=p; if(p->ltag==0)threpreorder(p->lch,pre); threpreorder(p->rch,pre); 4.4、录入信息intmain(){ intk;ThTreeroot0; do{cout<<"\n\n"; cout<<"\n\n1.建立二叉树"; cout<<"\n\n2.中序递归线索二叉树"; cout<<"\n\n3.先序线索化二叉树"; cout<<"\n\n4.后续线索化二叉树"; cout<<"\n\n5.结束程序运行"; cout<<"\n\n请输入您的选择:";cin>>k; switch(k)}4.5先序遍历线索化操作voidThTree::threpreorder(ThreNode*p,ThreNode*pre)//先根线索化二叉树{if(p!=NULL){cout<<p->data<<"";if(p->lch==NULL){p->lch=pre;p->ltag=1; } pre=p; if(p->ltag==0)threpreorder(p->lch,pre); threpreorder(p->rch,pre);}}4.6中序遍历线索化操作voidThTree::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后续遍历线索化操作voidThTree::threpostorder(ThreNode*p,ThreNode*pre)//后根线索化二叉树{ if(p!=NULL) { threpostorder(p->lch,pre);threpostorder(p->rch,pre); cout<<p->data<<""; if(p->lch==NULL){p->lch=pre;p->ltag=1;} pre=p; }}4.8主函数intmain(){ intk;ThTreeroot0; do{cout<<"\n\n"; cout<<"\n\n1.建立二叉树"; cout<<"\n\n2.中序递归线索二叉树"; cout<<"\n\n3.先序线索化二叉树"; cout<<"\n\n4.后续线索化二叉树"; cout<<"\n\n5.结束程序运行"; cout<<"\n\n请输入您的选择:";cin>>k; switch(k) {case1:{cout<<"\n建立二叉树:"; root0.creat(); }break; case2:{cout<<"\n中序递归线索二叉树的结果:"; root0.threinorder(); }break; case3:{cout<<"\n先序递归线索二叉树的结果:"; root0.threpreorder(); }break; case4:{cout<<"\n后续递归线索化二叉树的结果:"; root0.threpostorder(); }break; } }while(k>=0&&k<5); _getch(); return0;}5调试分析5.1测试数据测试数据见表1.5.2调试问题在测试过程中没有给测试者提供相关的录入信息要求,导致录入要求不合格,程序不能正常运行,经过添加了录入信息提示之后就解决了这个问题。5.3算法时间复杂度录入:时间复杂度为O(n);先根线索化二叉树:时间复杂度为O(n);中根线索化二叉树:时间复杂度为O(n);后根线索化二叉树:时间复杂度为O(n);删除结点:时间复杂度为O(n);5.4经验和体会在本次课程设计中主要是对图的数据结构操作,所有刚开始对知识不是很熟悉操作起来有一定难度,容易在程序的关键地方但经过翻阅教材能较好的解决问题。
6测试结果6.1录入信息图3录入信息界面
6.2新建模块图5查询景点信息界面
6.3中序递归线索化模块图6中序递归线索化界面6.4先序递归线索化模块图7先序递归线索化界面
6.5后序递归线索化模块图8后序递归线索化界面
结论本次课程设计“二叉树的线索化”按照任务书相应的要求成功的完成了任务,由于本课程设计涉及先序、后序、中序的线索化,以及相应的相关插入删除的操作,因此对算法的设计以及相关函数的调用要求很高,需要经过重复的查看相关书籍才能完成。
致谢在本次课程设计过程中,首先感谢辅导老师周立章,在数据结构课堂上为课程设计需要的前期知识打下了基础,在课程设计过程中抽出休息时间来做相应的课程设计指导。同时在这次课程设计中,也要感谢许多乐意同学对我不懂的地方的指导和耐心讲解
参考文献[1]严蔚敏,吴伟民.数据结构.北京.清华大学出版社出版。[2]严蔚敏,吴伟民.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国百舒宁磁药贴数据监测研究报告
- 2025至2030年中国温控器用瓷环数据监测研究报告
- 桥架购买合同范本
- 林地流转意向合同范本
- 科技创新在文化创意产业的应用报告
- 封端型非离子表面活性剂相关行业投资规划报告范本
- 泡丝剂相关行业投资规划报告
- 林业资源管理与规划考核试卷
- 2024年临沂市罗庄区事业单位招聘综合类岗位笔试真题
- 2024年阜阳颍上县江山实验高级中学招聘考试真题
- 家校共育之道
- DeepSeek入门宝典培训课件
- 西安2025年陕西西安音乐学院专职辅导员招聘2人笔试历年参考题库附带答案详解
- 《作文中间技巧》课件
- 广东省2025年中考物理仿真模拟卷(深圳)附答案
- 2025届八省联考 新高考适应性联考英语试题(原卷版)
- 新苏教版一年级下册数学第1单元第3课时《8、7加几》作业
- 2024年山东电力高等专科学校高职单招职业技能测验历年参考题库(频考版)含答案解析
- 《平面广告赏析》课件
- 【公开课】同一直线上二力的合成+课件+2024-2025学年+人教版(2024)初中物理八年级下册+
- DB52T 1036-2015 建材产品中废渣掺加量的测定方法
评论
0/150
提交评论