动态查找表二叉排序树Word格式文档下载.docx
- 文档编号:16286492
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:19
- 大小:303.13KB
动态查找表二叉排序树Word格式文档下载.docx
《动态查找表二叉排序树Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《动态查找表二叉排序树Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
3.4.4插入模块........................................13
3.4.5中序输出模块....................................15
参考文献..............................................17
心得体会.......................................18
教师评语.......................................19
附录................................................20
1Abstract(摘要)
Datastructureistherelationshipbetweenresearchanddata,wecall
thisrelationshipasalogicaldatastructure,referredtoasdata
structures.Whenthedatalogicalstructureisdetermined,thedatastored
inthephysicalspace,isknownasthedatastoragestructure.Thesame
logicalstructurecanhavedifferentstoragestructure,whichhasa
differentalgorithm.
Thecurriculumdesign,programdatais"
tree"
asitsdatastructure.
Specificuses"
binarysorttree"
anduse"
binarylist"
asitsstorage
structure.Thecourseisdesignedtoachieveabinarysorttreecreation,
in-ordertraversal,insert,findanddeleteabinarysorttreenodes.
Thiscourseismainlythefunctionofdynamiclook-uptable,through
the"
binarysearchtree"
algorithmand"
ofstoragestructures.
Thiscourseisdesignedtohighlightthesystemdesignconcept,overall
design,eachfunctionalmoduledesignandimplementation.
Keywords:
CLanguageDataStructureDynamicBinarySearchTree,
BinaryList
3
2抽象数据类型动态查找表定义
ADTDynamicSearchTable{
数据对象DD是具有一样特性的数据元素的集合。
各个数据元素含有类型一样
可唯一标识数据元素的关键字。
数据关系R:
数据元素同属一个集合。
根本操作P
InitDSTable(&
DT);
操作结果构造一个空的动态查找表DT。
DestroyDSTable&
DT;
初始条件动态查找表DT存在。
操作结果销毁动态查找表DT。
SearchDSTableDTkey;
初始条件动态查找表DT存在key为和关键字类型一样的给定值。
操作结果假如DT中存在其关键字等于key的数据元素如此函数值为该元素的
值或在表中的位置否如此为“空〞。
InsertDSTable&
DTe;
初始条件动态查找表DT存在e为待插入的数据元素。
操作结果假如DT中不存在其关键字等于e的数据元素如此插入e到DT。
DeleteDSTable&
DTkey;
操作结果假如DT中存在其关键字等于key的数据元素如此删除之。
InOrderTraverse(DT);
操作结果按中序的次序输出DT中的每个结点数据值。
}ADTDynamisSearchTable
5
3系统总体分析
二叉排序树是一种动态树表。
二叉排序树的定义二叉排序树或者是一棵空树或者是一棵具有如下性
质的二叉树
⑴假如它的左子树非空如此左子树上所有结点的值均小于根结点的值
⑵假如它的右子树非空如此右子树上所有结点的值均大于根结点的值
⑶左、右子树本身又各是一棵二叉排序树。
3.2二叉树的生成过程
二叉排序树的生成采用递归方式的边查找边插入的方式。
如图
3.3主要功能模块设计
程序主要设计了五个功能首先是创建二叉排序树完成后出现任务菜单
菜单中设计了六个模块查找删除插入中序输出清屏和退出。
N
Y
N
图2.3主函数流程图
3.4系统详细设计
3.4.1主函数菜单模块
该模块功能主要是给用户提供清晰的可操作界面易于人机操作并能很好
的调用其他各模块使程序更加优化丝路更加清晰结构更加明了提高了程
序的实用性。
其代码如下
#include"
BinaryTree.h"
voidmain(){
BiTreeT=NULL;
intarr[100];
intn,i,k;
intdata;
InitBiTree(T);
printf("
请输入结点数"
);
scanf("
%d"
&
n);
请输入数据"
for(i=0;
i<
n;
i++){
//输入要排序的数据
arr[i]);
}
//构造二叉排序树
InsertBiTree(T,arr[i]);
按中序输出"
InOrderTraverse(T);
//调用中序输出函数将二叉排序树按中序输出
\n"
Z:
{
//语句块供用户选择操作
7
\t\t---------------------------\n"
\t\t|功能菜单|\n"
\t\t|1.查找数据|\n"
\t\t|2.删除数据|\n"
\t\t|3.插入数据|\n"
\t\t|4.输出有序序列|\n"
\t\t|5.清屏|\n"
\t\t|6.退出|\n"
\t\t---------------------------\n\n"
X:
//该语句块用于循环选择
请输入选择功能的序号"
V:
//该语句块用于输入序号错误时重新输入
k);
}//endV
switch(k){
case1:
请输入要查找的数据"
data);
if(InsertBiTree(T,data)){
不存在数据元素%d\n"
data);
else{
8
存在数据元素%d\n"
break;
case2:
请输入要删除的数据"
if(!
DeleteBiTree(T,data)){
不存在要输出的数据%d\n"
else{
删除操作成功\n"
case3:
请输入要插入的数据"
InsertBiTree(T,data)){
要插入的数据%d已存在插入失败\n"
插入操作成功\n"
case4:
有序序列为"
case5:
system("
cls"
9
10
gotoZ;
case6:
DestroyBiTree(T);
exit(0);
default:
输入字符错误请重新输入:
"
gotoV;
}//endswitch
\n\n"
}//endX
gotoX;
}//endZ
}
3.4.2查找模块
该模块是给用户提供查找功能。
其查找过程是假如二叉排序树为空如此查找失败完毕查找返回信息NULL否如此将要查找的值与二叉排序树根结点的值进展比拟假如相等如此查找成功完毕查找返回被查找到结点的地址假如不等如此根据要查找的值与根结值的大小关系决定时到根结点的左子树还是右子树中继续查找查找过程同上直到查找成功或者查找失败为止。
其代码如下:
StatusSearchBiTree(BiTreeT,Elemkey,BiTreef,BiTree&
p){
//在根指针T所指二叉排序树中递归地查找某关键字等于key的数据
元素
//假如查找成功如此指针p指向该数据元素结点并返回TRUE否如此
指针p
//指向查找路径上访问的最后一个结点并返回FALSE指针f指向T
的双亲其初始调用值为NULL
T){
p=f;
returnFALSE;
//查找不成功
elseif(key==T->
data){
p=T;
returnTRUE;
//查找成功
elseif(key<
T->
//在左子树中继续查找
return(SearchBiTree(T->
left,key,T,p));
else{
//在右子树中继续查找
right,key,T,p));
3.4.3删除模块
删除结点函数采用边查找边删除的方式。
如果没有查找到如此不对树做任何的修改;
如果查找到结点如此分四种情况分别进展讨论
A该结点左右子树均为空可以直接进展删除
B该结点仅左子树为空右子树不为空用右子树的根结点取代被删除结
点的位置
C该结点仅右子树为空左子树不为空
D该结点左右子树均不为空找到被删除结点左子树中最大的结点并用
该结点取代被删除节点的位置。
StatusDelete(BiTree&
//从二叉排序树中删除结点p并重接它的左或右子树
BiTreeq,s;
//q=(BiTree)malloc(sizeof(BiTree));
//s=(BiTree)malloc(sizeof(BiTree));
p->
right){
//右子树为空如此重接它的左子树
q=p;
p=p->
left;
q->
left=NULL;
//free(q);
有错误
elseif(!
left){
//只需重接它的右子树
right;
right=NULL;
//有错误
//左右子树都不空
s=p->
while(s->
q=s;
s=s->
//转右然后向右走到尽头找到被删点的“前
驱〞
p->
data=s->
data;
//s指向被删结点的“前驱〞
s->
data=NULL;
if(q!
=p){
right=s->
//重接*q的右子树
left=s->
//重接*q的左子树任何的修改如果查找到结点如此分四种情况分别进展讨论
//重接*q的左子树
}
//free(s);
StatusDeleteBiTree(BiTree&
T,Elemkey){
//假如二叉排序树T中存在关键字等于key的数据元素时
//如此删除该数据元素结点并返回TRUE否如此返回FALSE
//不存在关键字等于key的数据元素
if(key==T->
returnDelete(T);
//找到关键字等于key的数据元素
=T->
//从左子树继续查找等于key的数据元素
returnDeleteBiTree(T->
left,key);
//从右子树继续查找等于key的数据元素
right,key);
3.4.4插入模块
在二叉排序树种插入新结点要保证插入后的二叉树仍符合二叉排序树的
定义。
插入过程假如二叉排序树为空如此待插入结点*p作为根结点插入到空树
中当非空时将待插结点关键字p->
item和树根关键字t->
item进展比拟
假如p->
item=t->
item如此无须插入假如p->
item<
t->
item如此插入到根的左子
树中假如p->
item>
item如此插入到根的右子树中。
而子树种的插入过程和
在树中的插入过程一样如此进展下去直到把结点*p作为一个新的树叶插入
到二叉排序树中或者直到发现数已有一样关键字的结点为止。
StatusInsertBiTree(BiTree&
//当二叉排序树T中不存在关键字等于key的数据元素时插入key并返回TRUE
//否如此返回FALSE
BiTrees=NULL;
BiTreep=NULL;
SearchBiTree(T,key,NULL,p)){
s=(BiTree)malloc(sizeof(BiTree));
s){
//内存分配失败时给出提示然后退出操作
内存空间分配失败\n"
exit(OVERFLOW);
data=key;
T=s;
left=s;
right=s;
else
3.4.5中序输出模块
遍历Traversal是指沿着某条搜索路线依次对树中每个结点均做一
次且仅做一次访问。
访问结点所做的操作依赖于具体的应用问题。
二叉树共有
三个局部组成即根结点根结点的左子树根结点的右子树。
限定以从左至
右方式共有三种遍历方式即前序遍历中序遍历后序遍历。
中序遍历的原
如此假如被遍历的二叉树为非空如此依次执行如下操作
A以中序遍历方式遍历左子树
B访问根结点
C以中序遍历方式遍历右子树。
//当二叉排序树T中不存在关键字等于key的数据元素时插入key并返
回TRUE
//否如此返回FALSE
if(!
图2.4.5
16
理工大学某某学
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 查找 二叉排序树
![提示](https://static.bdocx.com/images/bang_tan.gif)