数据结构实验七查找Word格式文档下载.docx

上传人:b****6 文档编号:21990221 上传时间:2023-02-02 格式:DOCX 页数:12 大小:21.14KB
下载 相关 举报
数据结构实验七查找Word格式文档下载.docx_第1页
第1页 / 共12页
数据结构实验七查找Word格式文档下载.docx_第2页
第2页 / 共12页
数据结构实验七查找Word格式文档下载.docx_第3页
第3页 / 共12页
数据结构实验七查找Word格式文档下载.docx_第4页
第4页 / 共12页
数据结构实验七查找Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

数据结构实验七查找Word格式文档下载.docx

《数据结构实验七查找Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验七查找Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

数据结构实验七查找Word格式文档下载.docx

*insertbst(t,s)

*s, 

*t;

{bstnode 

*f, 

*p;

p=t;

while(p!

{f=p;

if(s→key==p→key) 

return 

t;

if(s→key<

p→key) 

p=p→lchild;

else

p=p→rchild;

}

if(t==Null) 

s;

f→key) 

f→lchild=s;

f→rchild=s;

return 

*creatord( 

*t,*s;

int 

t=Null;

scanf(“%d”,&

key);

while(key!

=0)

{s=malloc(sizeof(bitree));

s→key=key;

s→lchild=Null;

s→rchild=Null;

scanf(“%d”,&

data);

s→other=data;

t=insertbst(t,s);

}

五、思考与提高

1.用其它的查找方法完成该算法。

2.比较各种算法的时间及空间复杂度。

六、完整参考程序

1.折半查找

#include<

conio.h>

stdio.h>

#defineMAX30//定义有序查找表的最大长度

typedefstruct{

charelem[MAX];

//有序查找表

intlength;

//length指示当前有序查找表的长度

}SSTable;

voidinitial(SSTable&

);

//初始化有序查找表

intsearch(SSTable,int);

//在有序查找表中查找元素

voidprint(SSTable);

//显示有序查找表中所有元素

voidmain()

{SSTableST;

//ST为一有序查找表

intch,loc,flag=1;

charj;

initial(ST);

while(flag)

{printf("

请选择:

\n"

printf("

1.显示所有元素\n"

2.查找一个元素\n"

3.退出\n"

scanf("

%c"

&

j);

switch(j)

{case'

1'

:

print(ST);

break;

//显示所有元素

case'

2'

{printf("

请输入要查找的元素:

"

scanf("

%d"

ch);

//输入要查找的元素的关键字

loc=search(ST,ch);

//查找

if(loc!

=0)printf("

该元素所在位置是:

%d\n"

loc);

//显示该元素位置

elseprintf("

%d不存在!

ch);

//当前元素不存在

break;

}

default:

flag=0;

}

程序运行结束!

按任意键退出!

}

v)

{//初始化有序查找表

inti;

请输入静态表的元素个数:

//输入有序查找表初始化时的长度

v.length);

请从小到大输入%d个元素(整形数):

v.length);

getchar();

for(i=1;

i<

=v.length;

i++)scanf("

v.elem[i]);

//从小到大输入有序查找表的各元素

intsearch(SSTablev,intch)

{//在有序查找表中查找ch的位置,成功返回其位置,失败返回0

intlow,high,mid;

low=1;

high=v.length;

//置区间初值

while(low<

=high)

{mid=(low+high)/2;

if(v.elem[mid]==ch)returnmid;

//找到待查元素

elseif(v.elem[mid]>

ch)high=mid-1;

//继续在前半区间进行查找

elselow=mid+1;

//继续在后半区间进行查找

return0;

//找不到时,i为0

voidprint(SSTablev)//显示当前有序查找表所有元素

{inti;

i++)printf("

%d"

v.elem[i]);

2.二叉排序树的建立与查找

math.h>

stdlib.h>

enumBOOL{False,True};

typedefstructBiTNode//定义二叉树节点结构

{chardata;

//为了方便,数据域只有关键字一项

structBiTNode*lchild,*rchild;

//左右孩子指针域

}BiTNode,*BiTree;

BOOLSearchBST(BiTree,char,BiTree,BiTree&

//在二叉排序树中查找元素

BOOLInsertBST(BiTree&

char);

//在二叉排序树中插入元素

BOOLDeleteBST(BiTree&

//在二叉排序树中删除元素

voidDelete(BiTree&

//删除二叉排序树的根结点

voidInorderBST(BiTree);

//中序遍历二叉排序树,即从小到大显示各元素

{BiTreeT,p;

charch,keyword,j='

y'

;

BOOLtemp;

T=NULL;

while(j!

='

n'

{printf("

1.display\n"

2.search\n"

3.insert\n"

4.delete\n"

5.exit\n"

//输入操作选项

switch(ch)

if(!

T)printf("

TheBSThasnoelem.\n"

else{InorderBST(T);

printf("

Inputthekeywordofelemtobesearched(achar):

keyword);

//输入要查找元素的关键字

temp=SearchBST(T,keyword,NULL,p);

if(!

temp)printf("

%cisn'

texisted!

keyword);

//没有找到

%chasbeenfound!

//成功找到

3'

Inputthekeywordofelemtobeinserted(achar):

//输入要插入元素的关键字

temp=InsertBST(T,keyword);

%chasbeenexisted!

//该元素已经存在

Sucesstoinert%c!

//成功插入

4'

Inputthekeywordofelemtobedeleted(achar):

//输入要删除元素的关键字

temp=DeleteBST(T,keyword);

//该元素不存在

Sucesstodelete%c\n"

//成功删除

default:

j='

Theprogramisover!

\nPressanykeytoshutoffthewindow!

getchar();

voidInorderBST(BiTreeT)

{//以中序方式遍历二叉排序树T,即从小到大显示二叉排序树的所有元素

if(T->

lchild)InorderBST(T->

lchild);

%2c"

T->

rchild)InorderBST(T->

rchild);

BOOLSearchBST(BiTreeT,charkey,BiTreef,BiTree&

p)

{//在根指针T所指二叉排序树中递归的查找其关键字等于key的元素,若查找成功

//则指针p指向该数据元素,并返回True,否则指针指向查找路径上访问的最后一

//个结点并返回False,指针f指向T的双亲,其初始调用值为NULL

BOOLtmp1,tmp2;

tmp1=tmp2=False;

if(!

T){p=f;

returnFalse;

}//查找不成功

elseif(key==T->

data){p=T;

returnTrue;

}//查找成功

elseif(key<

T->

data)tmp1=SearchBST(T->

lchild,key,T,p);

//在左子树中继续查找

elsetmp2=SearchBST(T->

rchild,key,T,p);

//在右子树中继续查找

if(tmp1||tmp2)returnTrue;

//若在子树中查找成功,向上级返回True

elsereturnFalse;

//否则返回False

T,chare)

{//当二叉排序树T中不存在元素e时,插入e并返回True,否则返回False

BiTreep,s;

SearchBST(T,e,NULL,p))//查找不成功

{s=(BiTree)malloc(sizeof(BiTNode));

s->

data=e;

lchild=s->

rchild=NULL;

p)T=s;

//被插结点*s为新的根结点

elseif(e<

p->

data)p->

lchild=s;

//被插结点*s为左孩子

elsep->

rchild=s;

//被插结点*s为右孩子

returnTrue;

//树中已存在关键字为e的数据元素

T,charkey)

{//若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点

//并返回True,否则返回False

T)returnFalse;

//不存在关键字等于key的数据元素

else

{if(key==T->

data){Delete(T);

//找到关键字等于key的数据元素并删除它

data)tmp1=DeleteBST(T->

lchild,key);

//继续在左子树中删除

elsetmp2=DeleteBST(T->

rchild,key);

//继续在右子树中删除

//在子树中删除成功,返回True

//不存在该元素

{//在二叉排序树中删除结点p,并重接它的左或右子树

BiTrees,q;

rchild)//右子树空,只需重接它的左子树

{q=p;

p=p->

lchild;

free(q);

elseif(!

lchild)//左子树空,只需重接它的右子树

rchild;

else//左右子树均不空

s=p->

while(s->

rchild)

{q=s;

s=s->

}//转左,然后向右走到尽头

p->

data=s->

data;

//s指向被删结点的“前驱”

if(q!

=p)q->

rchild=s->

//重接*q的右子树

elseq->

//重接*q的左子树

free(s);

(注:

可编辑下载,若有不当之处,请指正,谢谢!

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

当前位置:首页 > PPT模板 > 其它模板

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

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