线索二叉树课程设计说明书-模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学与计算机学院
课程设计说明书
课程名称: 数据结构与算法课程设计
课程代码:
题目: 线索二叉树的应用
年级/专业/班: 2010级软件1班
学生姓名:
学号: 1127
开始时间:2011 年12 月9 日完成时间:2011 年12 月23 日课程设计成绩:
1
指导教师签名:年月日
摘要
首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及ADT描述。然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。关键词:线索化;先序遍历;中序遍历;后续遍历
线索二叉树的运用
引言
数据结构是计算机专业重要的专业基础课程与核心课程之一,在计算机领域应用广泛,计算机离不开数据结构。数据结构课程设计为了能使我们掌握所学习的知识并有应用到实际的设计中的能力,对于掌握这门课程的学习方法有极大的意义。本课程设计的题目为“线索二叉树的应用”,完成将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树的操作。本课程设计采用的编程环境为Microsoft Visual Stdio 2008。
目录
1需求分析 (3)
2开发及运行平台 (4)
3 概要设计 (5)
4 详细设计 (7)
5 调试分析 (12)
6 测试结果 (13)
7 结论 (18)
致谢 (19)
参考文献 (20)
附录 (21)
1、需求分析
为了能更熟练精准的掌握二叉树的各种算法和操作,同时也为了开拓视野,综合运用所学的知识。为此,需要将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树,以实现线索树建立、插入、删除、恢复线索等。
1.1任务与分析
中次系统要实现对二叉树的建立,以及线索化该二叉树,同时实现对其先序、中序、后序线索话的并输出结果。
1.2测试数据
表1:入的二叉树结点序号和数据
线索二叉树的运用
- 3 -
2开发及运行平台
开发平台:Microsoft Visual Studio 2008
运行平台:Windows XP/2003/7
3 概要设计
3.1 ADT描述
ADT BiTree{
数据对象:D={“树节点”};
数据关系:R={H}
若D=∮为空,则R=∮,Tree为空树;
若D仅有一个数据元素,则R=∮;
否则R={H}详细描述如下:
D中存在唯一的称之为根的节点root,它在关系H下无前驱;
1.若D-{root}≠∮,则存在对根以外剩余元素的一个划分D1、
D2......,Dm(m>0),并对任意j≠k(1≦j≦m,1≦k≦m)有Dj∩Dk=
∮;且对任意i(1≦i≦m)唯一存在数据元素xi∈Di,有二元关系
2.对应于D-{root}的划分,关系集H-{
并且对任意的j≠k(1≦j≦m,1≦k≦m)有Hj∩Hk=∮,对任意的i(1
≦i≦m),Hi是Di上的二元关系,则(Di,{H})是一颗树,且是root
的子树。
基本操作:
void creat ();//创建一个二叉树。
void inorder ();//中序便利。
void ThTree::threpreorder ();//先序遍历二叉树。
void ThTree::threinorder ();//中序遍历二叉树。
void ThTree::threpostorder ();//后序遍历二叉树。
void ThTree::destroy ();//删除线索二叉树。
int main();//主函数。
}
线索二叉树的运用
- 5 -
3.2程序模块结构
图2 程序模块结构
3.2.1 结构体定义
书的结构体定义如下:
struct ThreNode //定义结点结构体 {
ElemType data;
ThreNode *lch;
ThreNode *rch;
int ltag,rtag;
};
3.3 各功能模块
新建模块: void ThTree::creat ()新建二叉树并储存。
树类模块:void ThTree ()定义书的结点,孩子以及各成员函数。
先序遍历模块: 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 初始化
构造函数初始化变量,定义双亲结点和左右标志域以及根结点:
void ThTree::creat() //建立二叉树{
ThreNode *q,*s[20]; ElemType x; int i,j;
cout<<"\n请按二叉树的层序自上而下自左至右顺序组织数据"< cout<<"\n每次输入结点的序号和数据,假设根结点值是11;"< cout<<"\n那么输入应该是:1 11"< cout<<"\ni,x="; cin>>i>>x; while(i!=0&&x!=0) { q=new ThreNode; //产生一个接点 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;else s[j]->rch=q; //j为双亲结点编号