数据结构设计说明书.doc





《数据结构设计说明书.doc》由会员分享,可在线阅读,更多相关《数据结构设计说明书.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、摘 要数据结构是研究与数据之间的关系,我们称这一关系为数据的逻辑结构,简称数据结构。当数据的逻辑结构确定以后,数据在物理空间中的存储方式,称为数据的存储结构。相同的逻辑结构可以具有不同的存储结构,因而有不同的算法。 本次课程设计,程序中的数据采用“树形结构”作为其数据结构。具体采用的是“二叉排序树”,并且使用“一维数组”来作为其存储结构。一维数组顺序表存储结构是用一组地址连续的存储单元依次自上而下、自左而右存储完全二叉树上的结点元素;本课程设计实现了二叉排序树的创建、中序遍历、计算二叉排序树的平均查找长度和删除二叉排序树中某个结点。本课程主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
2、重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。关键词:二叉排序树的实现;C语言;数据结构;线性表;顺序表;中序遍历。目录摘 要I1 课题背景的介绍11.1 课题背景11.2 目的12 需求分析12.1课程设计题目、任务及要求12.2课程设计思想23 系统总体设计33.1 系统模块划分33.2 二叉排序树的生成过程33.3 主要功能模块设计34 系统详细设计54.1 主函数菜单模块54.2 查找模块64.3 插入模块74.4 中序遍历模块84.5删除模块95 系统连编与运行116 总 结12参考文献13附录.14A) 课题背景的介绍1.1 课题背景随着经济的迅速发展,各行各业
3、纷纷应用计算机数据信息管理。当然数据信息是一个很笼统的概念,随着现代信息的大量增加,其处理难度也越来越大,如何对各个数据信息进行更好的树立,这就是我们研究这个课题的目的。在计算机迅速发展的今天,将计算机这一信息处理器应用于实际数据问题问题的信息计算已是势必所然,而且这也将数据信息处理带来前所未有的改变。采用计算机对数据的信息处理是信息科学化和现代化的重要标志,它也给各行各业带来了明显的经济效益。主要体现在:极大地提高了工作人员的工作效率,大大地减少了以往的手工操作的各种弊端,同时也加强和规范掌握对于数据信息的计算。1.2 目的本课题运用C语言进行开发,C语言能够简单的进行编译一些程序,来实现对
4、一些问题的解决。它虽然比较简单的处理一些问题,但却有更高的效率。它能够被大多数用户所接受,因为它能够呈现出清晰的界面,是人们能够很好的理解。能在一些方面给人们更好的服务,成为人们的好帮手。经过这一个学期对数据结构的学习,我们都学到了不少东西,可能有些学的还不够理想,但无论如何这些知识都为我们的下一步学习打下了坚实的基础。做这么一个课程设计,一方面是为了检查我们一个学期以来的学习成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。B) 需求分析2.1课程设计题目、任务及要求二叉排序树。用顺序表(一维数组)作存储结构 (1)以回车(n)为输入
5、结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)计算二叉排序树T查找成功的平均查找长度,输出结果;(4)输入元素x,查找二叉排序树T:若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;2.2课程设计思想建立二叉排序树采用边查找边插入的方式。查找函数采用递归的方式进行查找。如果查找成功则不应再插入原树,否则返回当前结点的上一个结点。然后利用插入函数将该元素插入原树。对二叉树进行中序遍历采用递归函数的方式。在根结点不为空的情况下,先访问左子树,再访问根结点,最后访问右子树。计算二插排序树的平均查找长度时,仍采用类似中序遍历
6、的递归方式,用s记录总查找长度,j记录每个结点的查找长度,s置初值为0,采用累加的方式最终得到总查找长度s。平均查找长度就等于s/i(i为树中结点的总个数)。删除结点函数,采用边查找边删除的方式。如果没有查找到,则不对树做任何的修改;如果查找到结点,则分四种情况分别进行讨论:1、该结点左右子树均为空;2、该结点仅左子树为空;3、该结点仅右子树为空;4、该结点左右子树均不为空。C) 系统总体设计3.1 系统模块划分二叉排序树是一种动态树表。二叉排序树的定义:二叉排序树或者是一棵空树,或者是一棵具有如下性质的二叉树: 若它的左子树非空,则左子树上所有结点的值均小于根结点的值; 若它的右子树非空,则
7、右子树上所有结点的值均大于根结点的值; 左、右子树本身又各是一棵二叉排序树。3.2 二叉排序树的生成过程二叉排序树的生成,采用递归方式的边查找边插入的方式。如图初始化数组插入结点空树在左子树中查找在右子树中查找插入插入插入是是否否3.3 主要功能模块设计程序主要设计了五个功能:首先是创建二叉排序树,完成后出现任务菜单,菜单中设计了四个模块:退出,中序遍历,计算平均查找长度和删除结点。主函数流程如下:否否否否否是创建二叉排序树Switch(1)中序遍历Switch(0)Exit(0)退出Switch(3)删除结点Switch(2)default提示出错计算平均查找长度是是是是是是是是 图3.1.
8、1主函数流程图 4 系统详细设计4.1 主函数菜单模块 该模块功能主要是给用户提供清晰的可操作界面,易于人机操作,并能很好的调用其他各模块,使程序更加优化,思路更加清晰,结构更加明了,提高了程序的实用性。其算法如下:Void main() node T=NULL;Int num;Int ch=0;Node p=NULL;Printf(please input a list o numbers end with zero:);Do scanf(%d,&num); If(!num) printf(you have finished your input!n); Else insertBST(&T,
9、num); while(num);Printf(nn-the menu of the opperation-n);/*主程序菜单*/Printf(n 0: exit);Printf(n 1: inorder travel the tree);Printf(n 2: delete);While(ch=ch) printf(n choose the opperation to continue:);Scanf(%d,&ch);Switch(ch)Case 0: exit(0); /*0-退出*/Case 1: printf( The result of inorder traverse is:n
10、);Inorder Traverse(&T); /*1-中序遍历*/Break;Case 2: printf( Please input the number you want to delete:);Scanf(%d,&num); /*3-删除某个结点*/If(searchBST(T,num,NULL,&p) T=delete(T,num); Printf( You have delete the number successfully!n );InorderTravers(&T);Else printf( No node %d you want to delete!,num);Break;
11、Default: printf(You input is wrong!Please input again!n);Break;Default: printf(Your input is wrong!Please input again!n);Break; /*输入无效字符*/ 4.2 查找模块 该模块是给用户提供查找功能。其查找过程是:若二叉排序树为空,则查找失败,结束查找,返回信息 NULL;否则,将要查找的值与二叉排序树根结点的值进行比较,若相等,则查找成功,结束查找,返回被查找到结点的地址,若不等,则根据要查找的值与根结值的大小关系决定时到根结点的左子树还是右子树中继续查找(查找过程同上
12、),直到查找成功或者查找失败为止。其算法如下:scarchBST(node,int key,node f,node *p) /*查找函数*/If(!t) *p=f;return(1); /*查找不成功*/Else if(key=t-data) searchBST(t-lchild,key,t,p); /*在左子树中继续查找*/Else searchBST(t-rchild,key,t,p); /*在右子树中继续查找*/4.3 插入模块 在二叉排序树种插入新结点,要保证插入后的二叉树仍符合二叉排序树的定义。插入过程;若二叉排序树为空,则待插入结点*p作为根结点插入到空树中;当非空时,将待插结点关
13、键字p-item和树根关键字t-item进行比较,若p-item=t-item,则无须插入,若p-itemitem,则插入到根的左子树中,若p-itemt-item,则插入到根的右子树中。而子树种的插入过程和在树中的插入过程相同,如此进行下去,直到把结点*p作为一个新的树叶插入到二叉排序树中,或者直到发现数已有相同关键字的结点为止。其算法如下:insertBST(node *t,int key) /*插入函数*/ Node p=NULL,s=NULL; If(!searchBST(*t,key,NULL,&p) /*查找不成功*/ S=(node)malloc(size(BSTnode); S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构设计 说明书

限制150内