ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:303.13KB ,
资源ID:3381001      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3381001.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(动态查找表二叉排序树.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

动态查找表二叉排序树.docx

1、动态查找表二叉排序树理工大学某某学院计算机学院课程设计 动态查找表 摘 要 数据结构是研究与数据之间的关系 我们称这一关系为数据的逻辑结构 简称数据结构。当数据的逻辑结构确定以后 数据在物理空间中的存储方式 称为数据的存储结构。一样的逻辑结构可以具有不同的存储结构 因而有不同的算法。 本次课程设计 程序中的数据采用“树形结构作为其数据结构。具体采用的是“二叉排序树 并且使用“二叉链表来作为其存储结构。本课程设计实现了二叉排序树的创建、中序遍历、插入、查找和删除二叉排序树中某个结点。 本课程主要实现动态查找表的功能 通过“二叉排序树的算法和“二叉链表的存储结构来实现。本课程设计说明书重点介绍了系

2、统的设计思路、总体设计、各个功能模块的设计与实现方法。 关键词 数据结构 C语言 二叉排序树 动态 二叉链表1理工大学某某学院计算机学院课程设计2摘要. 1 1ABSTRACT. 323抽象数据类型动态查找表定义 . 4 43 系统总体分析. 53.1系统模块划分 . 5 3.2 二叉树的生成过程 . 5 3.3 主要功能模块设计 . 5 3.4 系统详细设计 . 7 3.4.1 主函数菜单模块 . 7 3.4.2 查找模块 . 10 3.4.3 删除模块 . 11 3.4.4 插入模块 . 13 3.4.5 中序输出模块 . 15 参考文献. 17 心得体会. 18 教师评语. 19 附录.

3、 202理工大学某某学院计算机学院课程设计1 Abstract(摘要)Data structure is the relationship between research and data, we call this relationship as a logical data structure, referred to as data structures. When the data logical structure is determined, the data stored in the physical space, is known as the data storage s

4、tructure. The same logical structure can have different storage structure, which has a different algorithm. The curriculum design, program data is tree as its data structure. Specific uses binary sort tree and use binary list as its storage structure. The course is designed to achieve a binary sort

5、tree creation, in-order traversal, insert, find and delete a binary sort tree nodes. This course is mainly the function of dynamic look-up table, through the binary search tree algorithm and binary list of storage structures. This course is designed to highlight the system design concept, overall de

6、sign, each functional module design and implementation. Keywords: C Language Data Structure Dynamic Binary Search Tree, Binary List 3理工大学某某学院计算机学院课程设计2 抽象数据类型动态查找表定义ADT DynamicSearchTable 数据对象DD是具有一样特性的数据元素的集合。各个数据元素含有类型一样可唯一标识数据元素的关键字。数据关系R:数据元素同属一个集合。根本操作PInitDSTable(&DT); 操作结果构造一个空的动态查找表DT。Destro

7、yDSTable&DT; 初始条件动态查找表DT存在。操作结果销毁动态查找表DT。SearchDSTableDTkey; 初始条件动态查找表DT存在key为和关键字类型一样的给定值。操作结果假如DT中存在其关键字等于key的数据元素如此函数值为该元素的值或在表中的位置否如此为“空。InsertDSTable&DTe; 初始条件动态查找表DT存在e为待插入的数据元素。操作结果假如DT中不存在其关键字等于e的数据元素如此插入e到DT。DeleteDSTable&DTkey; 初始条件动态查找表DT存在key为和关键字类型一样的给定值。操作结果假如DT中存在其关键字等于key的数据元素如此删除之。I

8、nOrderTraverse(DT); 初始条件动态查找表DT存在。操作结果按中序的次序输出DT中的每个结点数据值。ADT DynamisSearchTable4理工大学某某学院计算机学院课程设计53 系统总体分析二叉排序树是一种动态树表。二叉排序树的定义二叉排序树或者是一棵空树或者是一棵具有如下性质的二叉树假如它的左子树非空如此左子树上所有结点的值均小于根结点的值假如它的右子树非空如此右子树上所有结点的值均大于根结点的值左、右子树本身又各是一棵二叉排序树。3.2 二叉树的生成过程二叉排序树的生成采用递归方式的边查找边插入的方式。如图3.3 主要功能模块设计程序主要设计了五个功能首先是创建二叉

9、排序树完成后出现任务菜单菜单中设计了六个模块查找删除插入中序输出清屏和退出。5理工大学某某学院计算机学院课程设计N Y N Y N Y N Y N Y N Y N Y N图2.3 主函数流程图理工大学某某学院计算机学院课程设计3.4 系统详细设计3.4.1 主函数菜单模块该模块功能主要是给用户提供清晰的可操作界面易于人机操作并能很好的调用其他各模块使程序更加优化丝路更加清晰结构更加明了提高了程序的实用性。其代码如下#include BinaryTree.h void main() BiTree T = NULL; intarr100; int n, i, k; int data; InitBi

10、Tree(T); printf(请输入结点数); scanf(%d, &n); printf(请输入数据); for(i = 0; i n; i+) /输入要排序的数据scanf(%d, &arri); for(i = 0; idata) p = T; return TRUE; /查找成功 else if(key data) /在左子树中继续查找 return (SearchBiTree(T-left, key, T, p); else /在右子树中继续查找 return (SearchBiTree(T-right, key, T, p); 3.4.3 删除模块删除结点函数采用边查找边删除的方

11、式。如果没有查找到如此不对树做任何的修改;如果查找到结点如此分四种情况分别进展讨论A该结点左右子树均为空可以直接进展删除B该结点仅左子树为空右子树不为空用右子树的根结点取代被删除结点的位置C该结点仅右子树为空左子树不为空D该结点左右子树均不为空找到被删除结点左子树中最大的结点并用该结点取代被删除节点的位置。其代码如下Status Delete(BiTree&p) /从二叉排序树中删除结点p并重接它的左或右子树BiTree q, s; /q = (BiTree)malloc(sizeof(BiTree); /s = (BiTree)malloc(sizeof(BiTree); if(!p-rig

12、ht) /右子树为空如此重接它的左子树 q = p; p = p-left; q-left = NULL; / free(q); 有错误 else if(!p-left) /只需重接它的右子树 q = p; p = p-right; q-right = NULL; / free(q); /有错误 else /左右子树都不空 q = p; s = p-left; while(s-right) q = s; s = s-right; /转右然后向右走到尽头找到被删点的“前驱 p-data = s-data; /s指向被删结点的“前驱 s-data = NULL; if(q != p) q-righ

13、t = s-left; /重接*q的右子树 else q-left = s-left; /重接*q的左子树任何的修改如果查找到结点如此分四种情况分别进展讨论A该结点左右子树均为空可以直接进展删除B该结点仅左子树为空右子树不为空用右子树的根结点取代被删除结点的位置C该结点仅右子树为空左子树不为空D该结点左右子树均不为空找到被删除结点左子树中最大的结点并用该结点取代被删除节点的位置。其代码如下Status Delete(BiTree&p) /从二叉排序树中删除结点p并重接它的左或右子树BiTree q, s; /q = (BiTree)malloc(sizeof(BiTree); /s = (Bi

14、Tree)malloc(sizeof(BiTree); if(!p-right) /右子树为空如此重接它的左子树 q = p; p = p-left; q-left = NULL; / free(q); 有错误 else if(!p-left) /只需重接它的右子树 q = p; p = p-right; q-right = NULL; / free(q); /有错误 else /左右子树都不空 q = p; s = p-left; while(s-right) q = s; s = s-right; /转右然后向右走到尽头找到被删点的“前驱 p-data = s-data; /s指向被删结点

15、的“前驱 s-data = NULL; if(q != p) q-right = s-left; /重接*q的右子树 else q-left = s-left; /重接*q的左子树/ free(s); 有错误 return TRUE; Status DeleteBiTree(BiTree&T, Elem key) /假如二叉排序树T中存在关键字等于key的数据元素时 /如此删除该数据元素结点并返回TRUE否如此返回FALSE if(!T) return FALSE; /不存在关键字等于key的数据元素 else if(key = T-data) return Delete(T); /找到关键字

16、等于key的数据元素 else if(key data) /从左子树继续查找等于key的数据元素 return DeleteBiTree(T-left, key); else /从右子树继续查找等于key的数据元素 return DeleteBiTree(T-right,key); 3.4.4 插入模块在二叉排序树种插入新结点要保证插入后的二叉树仍符合二叉排序树的定义。插入过程假如二叉排序树为空如此待插入结点*p作为根结点插入到空树中当非空时将待插结点关键字p-item和树根关键字t-item进展比拟假如p-item=t-item如此无须插入假如p-itemitem如此插入到根的左子树中假如p

17、-itemt-item如此插入到根的右子树中。而子树种的插入过程和在树中的插入过程一样如此进展下去直到把结点*p作为一个新的树叶插入到二叉排序树中或者直到发现数已有一样关键字的结点为止。其代码如下Status InsertBiTree(BiTree&T, Elem key) /当二叉排序树T中不存在关键字等于key的数据元素时插入key并返回TRUE /否如此返回FALSE BiTree s = NULL; BiTree p = NULL; if(!SearchBiTree(T, key, NULL, p) s = (BiTree)malloc(sizeof(BiTree); if(!s) /

18、内存分配失败时给出提示然后退出操作printf(内存空间分配失败n); exit(OVERFLOW); s-data = key; s-left = s-right = NULL; if(!p) T = s; else if(key data) p-left = s; else p-right = s; return TRUE; else return FALSE; 3.4.5 中序输出模块遍历Traversal是指沿着某条搜索路线依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。二叉树共有三个局部组成即根结点根结点的左子树根结点的右子树。限定以从左至右方式共有

19、三种遍历方式即前序遍历中序遍历后序遍历。中序遍历的原如此假如被遍历的二叉树为非空如此依次执行如下操作A以中序遍历方式遍历左子树B访问根结点C以中序遍历方式遍历右子树。其代码如下Status InsertBiTree(BiTree&T, Elem key) /当二叉排序树T中不存在关键字等于key的数据元素时插入key并返回TRUE /否如此返回FALSE BiTree s = NULL; BiTree p = NULL; if(!SearchBiTree(T, key, NULL, p) s = (BiTree)malloc(sizeof(BiTree); if(!s) /内存分配失败时给出提示然后退出操作printf(内存空间分配失败n); exit(OVERFLOW); s-data = key; s-left = s-right = NULL; if(!p) T = s; else if(key data) p-left = s; else p-right = s; return TRUE; else return FALSE; 图2.4.5 16理工大学某某学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1