动态查找表二叉排序树Word格式文档下载.docx

上传人:b****6 文档编号:16286492 上传时间:2022-11-22 格式:DOCX 页数:19 大小:303.13KB
下载 相关 举报
动态查找表二叉排序树Word格式文档下载.docx_第1页
第1页 / 共19页
动态查找表二叉排序树Word格式文档下载.docx_第2页
第2页 / 共19页
动态查找表二叉排序树Word格式文档下载.docx_第3页
第3页 / 共19页
动态查找表二叉排序树Word格式文档下载.docx_第4页
第4页 / 共19页
动态查找表二叉排序树Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

动态查找表二叉排序树Word格式文档下载.docx

《动态查找表二叉排序树Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《动态查找表二叉排序树Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

动态查找表二叉排序树Word格式文档下载.docx

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:

CLanguageDataStructureDynamicBinarySearchTree,

BinaryList

3

2抽象数据类型动态查找表定义

ADTDynamicSearchTable{

数据对象DD是具有一样特性的数据元素的集合。

各个数据元素含有类型一样

可唯一标识数据元素的关键字。

数据关系R:

数据元素同属一个集合。

根本操作P

InitDSTable(&

DT);

操作结果构造一个空的动态查找表DT。

DestroyDSTable&

DT;

初始条件动态查找表DT存在。

操作结果销毁动态查找表DT。

SearchDSTableDTkey;

初始条件动态查找表DT存在key为和关键字类型一样的给定值。

操作结果假如DT中存在其关键字等于key的数据元素如此函数值为该元素的

值或在表中的位置否如此为“空〞。

InsertDSTable&

DTe;

初始条件动态查找表DT存在e为待插入的数据元素。

操作结果假如DT中不存在其关键字等于e的数据元素如此插入e到DT。

DeleteDSTable&

DTkey;

操作结果假如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

理工大学某某学

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

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

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