二叉树数据结构课程设计.doc
《二叉树数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《二叉树数据结构课程设计.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目 录第一章 需求分析11.1课程设计题目11.2 课程设计任务及要求11.21 课程设计目的11.22 设计要求11.3课程设计思想21.4 软件运行环境及开发工具2第二章概要设计32.1 数据结构32.2 所用方法及其原理说明3第三章 详细设计43.1 详细设计方案43.2 模块设计43.21 二叉树定义43.22 树状显示二叉树设计73.22 主函数设计10第四章 调试和操作说明114.1 调试114.2 操作说明12第五章 总结与体会125.1 本文的主要工作125.2 存在问题125.3 心得体会12致 谢13参考文献14第一章 需求分析1.1课程设计题目树状显示二叉树:编写函数di
2、splaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。问题描述 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用(层号,须打印的空格数)来界定。第0层:根在(0,32)处输出;第1层:因为根节点缩进了32个空格,所以下一层的偏移量(offset)为32/2=16=screenwidth/22。即第一层的两个节点的位置为(1,32-offset),(1,32+offset)即(1,16),(1,48)。第二层:第二层的偏移量offset为screenwidth/23。第
3、二层的四个节点的位置 分别是(2,16-offset),(2,16+offset),(2,48-offset),(2,48+offset)即(2,8),(2,24),(2,40),(2,56)。第i层:第i层的偏移量offset为screenwidth/2i+1。第i层的每个节点的位置是访问第i-1层其双亲节点时确定的。假设其双亲的位置为(i-1,parentpos)。若其第i层的节点是其左孩子,那末左孩子的位置是(i,parentpos-offset),右孩子的位置是(i,parentpos+offset)。实现提示 利用二叉树的层次遍历算法实现。利用两个队列Q,QI。队列Q中存放节点信息,
4、队列QI中存相应于队列Q中的节点的位置信息,包括层号和需要打印节点值时需要打印的空格数。当节点被加入到Q时,相应的打印信息被存到QI中。二叉树本身采用二叉链表存储。1.2 课程设计任务及要求1.21 课程设计目的据结构是计算机专业的核心课程,是一门实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段,要求学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C(C+)程序并上机调试的基本方法,还要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。1.22 设计要求1、课程设计
5、题目每组一题,每个学生必须独立完成;2、课程设计时间为2周;3、设计语言C(C+)不限;4、上机任务1)选择合适的数据结构,并定义数据结构的结构体;2)根据程序所要完成的基本要求,设计出完整的算法;3)设计出主程序(main函数),使其成为完整的程序。 6、上机时间:按照实验室上机时间安排计划执行 7、无论在校外、校内,都要严格遵守学校和所在单位的学习和劳动纪律、规章制度,学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。1.3课程设计思想二叉树是一种树形结构,它的特点是每个结点至多有两棵子树,即二叉树中不存在度大于2的结点,并且二叉树的子树
6、有左右之分,其次序不能任意颠倒。本设计主要根据二叉树的性质原理为设计的主体思路,二叉树的性质如下:性质1:在二叉树的第i层上至多有2i-1个结点(i=1);性质2:深度为K的二叉树至多有2k-1个结点(K=1);性质3:如果一棵有n各结点的完全二叉树的结点按层次编号,则对任一结点i(1=in,则结点无左孩子,否则其左孩子是结点2i;(2)若2i+1n,则结点i无右孩子,否则其右孩子为2i+1;另外,本设计利用二叉树的广度优先搜索算法实现。利用两个队列Q,QI。队列Q中存放节点信息,队列QI中存相应于队列Q中的节点的位置信息,包括层号和需要打印节点值时需要打印的空格数。当节点被加入到Q时,相应的
7、打印信息被存到QI中。二叉树本身采用二叉链表存储。本设计应用了C语言中的类来自定义头文件,将任务分成多个的模块,增强了可读性和简单性,同时为日后的编写,调试,维护提供了极大地方便。1.4 软件运行环境及开发工具本设计用到的软件是Microsoft Visual C+ 6.0程序开发软件,Microsoft Visual C+ 6.0是20世纪90年代中期由美国微软公司推出的一个强大的Windows应用程序开发平台,是“真正的程序员”首选的开发工具之一,也是有志于程序设计的程序员、大中专院校学生进入高级程序设计领域的首选软件之一。Microsoft Visual C+ 6.0程序开发软件提供了一
8、个可视化集成编程环境,能自动生成Windows应用程序的共有部分,帮助程序设计人员直接切入实际功能部分的代码编制主题,从而大大简化了复杂的Windows应用程序开发过程,极大的提高了程序设计的效率,其次, VC+功能强大,内容浩瀚在该环境下用户可以开发有关C和C+的各种应用程序,应用程序的开发包括建立、编辑、浏览、链接和调试等操作。第二章概要设计2.1 数据结构树状显示二叉树是二叉树的一种自然显示方法,本设计结果将二叉树形象的显示在屏幕上,直观易懂。因此本设计将对树状显示二叉树的设计步骤进行详细说明。首先得构造一个数组来存储整个二叉树的结点信息,建立两个队列Q和QI,队列Q中存放节点信息,队列
9、QI中存相应于队列Q中的节点的位置信息,包括层号和需要打印节点值时需要打印的空格数。当节点被加入到Q时,相应的打印信息被存到QI中。然后通过插入排序算法来构造一个二叉树,并用二叉树的层次遍历来使二叉树有顺序的存入队列Q,最后通过队列QI使得二叉树树状的显示在屏幕上。该程序的主要流程图如图2-1所示。2.2 所用方法及其原理说明 本设计主要运用了树的广度优先搜索和队列的先进先出的特点,树的广度优先搜索功能如下: 假设从图中某顶点v出发,在访问了v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有
10、已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素。在队列中允许插入的一端叫队尾,允许删除的一端叫对头。队列的示意图如下: 图1 二叉树示意图第三章 详细设计3.1 详细设计方案本设计利用两个队列Q,QI,队列Q中存放结点信息,队列QI中存相应于队列Q中的节点的位置信息,包括层号和需要打印节点值时需要打印的空格数。当节点被加入到Q时,相应的打印信息被存到QI中。用二叉树(二叉树本身采用二叉链表存储)的层次遍历算法实现了二叉
11、树的树状显示。本设计应用了C语言中的类来自定义头文件,将任务分成多个的模块,增强了可读性和简单性,同时为日后的编写,调试,维护提供了极大地方便。3.2 模块设计本程序包括三部分,即二叉树定义部分(MyHeap.h),树状显示二叉树的实现(MyHeap.cpp)部分以及最重要的主函数部分(main.cpp)。下面将对各模块设计思想及设计方法进行详细的说明。3.21 二叉树定义需要显示的二叉树的示意图如下: 图2 树状二叉树#include #include #include #define TElemType char#define OK 1#define ERROR 0#define OVER
12、FLOW -2#define TRUE 1#define FALSE 0typedef int Status ; #define MAXQSIZE 100 typedef struct BiNode int data; struct BiNode *lchild; struct BiNode *rchild;BiNode, *BiTree;typedef int ElemType;typedef struct ElemType *base; /*数组首地址*/ int front; /*头指针,若队列不空,指向队列头元素*/ int rear; /*尾指针,若队列不空,指向队列尾元素的下一个位
13、置*/SqQueue;typedef struct int level;int pos;bool enter;int spaceNum;DisplayInfo;Status insert(BiTree bt,int key)BiTree p,q,newNode; newNode=(BiTree)malloc(sizeof(BiNode);p=NULL;q=bt;while(q)p=q;if(keydata)q=q-lchild;else q=q-rchild;if(p)if(keydata)p-lchild=newNode;elsep-rchild=newNode;elsebt=newNode
14、;Status InitQueue(SqQueue *Q) Q-base=(ElemType *)malloc(MAXQSIZE*sizeof(ElemType); if (!Q-base) printf(分配空间失败!); return OVERFLOW; Q-front=0; Q-rear=0; return OK;EnQueue(SqQueue *Q, ElemType e) /* 插入元素e为新的队尾元素 */ if ( (Q-rear+1)%MAXQSIZE=Q-front ) printf(队列满了!); return ERROR; Q-baseQ-rear=e; Q-rear=(
15、Q-rear+1)%MAXQSIZE;DeQueue(SqQueue *Q, ElemType *e) /* 删除队头元素,并由e返回其值 */ if (Q-front=Q-rear) return ERROR; *e=Q-baseQ-front; Q-front=(Q-front+1)%MAXQSIZE;Status IsEmpty(SqQueue *Q) if (Q-front=Q-rear) return OK; else return ERROR; BiTree CreateBiTree(BiTree bt) char ch; scanf(%c,&ch); if(ch=.) bt=NU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 数据结构 课程设计
限制150内