数据结构实验 查找Word文件下载.docx
- 文档编号:15896643
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:12
- 大小:114.99KB
数据结构实验 查找Word文件下载.docx
《数据结构实验 查找Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验 查找Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
#include<
time.h>
typedefintKeyType;
typedefintOtherType;
typedefstructnode
{
KeyTypekey;
/*关键字的值*/
structnode*lchild,*rchild;
/*左右指针*/
}BSTNode,*BSTree;
typedefstruct
KeyTypekey;
OtherTypeother_data;
}RecordType;
RecordTyper[LIST_SIZE+1];
/*r[0]为工作单元*/
intlength;
}RecordList;
voidcreatelist(RecordList*l)
inti;
intlen;
KeyTypech;
printf("
请输入线性表的长度:
"
);
scanf("
%d"
&
len);
l->
length=len;
for(i=1;
i<
=len;
i++)
{
printf("
请输入线性表的第%d个元素:
i);
fflush(stdin);
scanf("
%c"
ch);
l->
r[i].key=ch;
}
}
intBinSrch(RecordListl,KeyTypek)
/*在有序表l中折半查找其关键字等于k的元素,若找到,则函数值为该
元素在表中的
位置*/
intlow,high,mid;
low=1;
high=l.length;
/*置区间初值*/
while(low<
=high)
mid=(low+high)/2;
if(k==l.r[mid].key)
return(mid);
/*找到待查元素*/
else
if(k<
l.r[mid].key)
high=mid-1;
/*未找到,则继续在
前半区间进行查找*/
else
low=mid+1;
/*继续在后半区间进行
查找*/
return(0);
voidInsertBST(BSTree*bst,KeyTypekey)
/*若在二叉排序树中不存在关键字等于key的元素,插入该元素*/
{
BSTrees;
if(*bst==NULL)/*递归结束条件*/
s=(BSTree)malloc(sizeof(BSTNode));
/*申请新的结点s*/
s->
key=key;
lchild=NULL;
rchild=NULL;
*bst=s;
else
if(key<
(*bst)->
key)
InsertBST(&
((*bst)->
lchild),key);
/*将s插入左子树*/
if(key>
InsertBST(&
rchild),key);
/*将s插入右子树*/
/*
intInsertBST(BSTree*bst,KeyTypeK)
BSTreef,q,s;
s=(BSTree)malloc(sizeof(BSTNode));
s->
key=K;
lchild=NULL;
rchild=NULL;
if(*bst==NULL)
{
*bst=s;
return1;
f=NULL;
q=*bst;
while(q)
if(q->
key==K)
return0;
if(K<
q->
key)
{
f=q;
q=q->
lchild;
}
rchild;
if(K<
f->
f->
lchild=s;
rchild=s;
return1;
*/
voidCreateBST(BSTree*bst)
/*从键盘输入元素的值,创建相应的二叉排序树*/
*bst=NULL;
srand((unsigned)time(NULL));
//初始化随机数
for(i=0;
i<
8;
i++)
{key=(rand()%10+1);
%d"
key);
//产生1~10之间的随机数
//while(key!
=ENDKEY)/*ENDKEY为自定义常量*/
//{
InsertBST(bst,key);
//scanf("
&
key);
//}
voidPreOrder(BSTreeroot)
/*先序遍历二叉树,root为指向二叉树根结点的指针*/
if(root!
=NULL)
root->
/*输出结点*/
PreOrder(root->
lchild);
/*先序遍历左子树*/
rchild);
/*先序遍历右子树*/
BSTreeSearchBST(BSTreebst,KeyTypekey)
/*在根指针bst所指二叉排序树中,递归查找某关键字等于key的元素,若查找成功,返回指向该元素结点指针,否则返回空指针*/
if(!
bst)
returnNULL;
if(bst->
key==key)
returnbst;
/*查找成功*/
else
if(bst->
key>
key)
returnSearchBST(bst->
lchild,key);
/*在左子树继续查找*/
rchild,key);
/*在右子树继续查找*/
}*/
/*在根指针bst所指二叉排序树bst上,查找关键字等于key的结点,若查找成功,返回指向该元素结点指针,否则返回空指针*/
BSTreeq;
q=bst;
while(q)
if(q->
key==key)
returnq;
/*查找成功*/
key)
q=q->
/*在左子树中查找*/
/*在右子树中查找*/
returnNULL;
/*查找失败*/
}/*SearchBST*/
BSTNode*DelBST(BSTreet,KeyTypek)/*在二叉排序树t中删去关键字为k的结点*/
BSTNode*p,*f,*s,*q;
p=t;
f=NULL;
while(p)/*查找关键字为k的待删结点p*/
if(p->
key==k)break;
/*找到则跳出循环*/
f=p;
/*f指向p结点的双亲结点*/
key>
k)
p=p->
}
if(p==NULL)returnt;
/*若找不到,返回原来的二叉排序树*/
if(p->
lchild==NULL)/*p无左子树*/
if(f==NULL)
t=p->
/*p是原二叉排序树的根*/
if(f->
lchild==p)/*p是f的左孩子*/
f->
lchild=p->
rchild;
/*将p的右子树链到f的左链上*/
else/*p是f的右孩子*/
rchild=p->
/*将p的右子树链到f的右链上*/
free(p);
/*释放被删除的结点p*/
else/*p有左子树*/
q=p;
s=p->
while(s->
rchild)/*在p的左子树中查找最右下结点*/
{
q=s;
s=s->
if(q==p)
q->
lchild=s->
lchild;
/*将s的左子树链到q上*/
rchild=s->
p->
key=s->
key;
/*将s的值赋给p*/
free(s);
returnt;
}/*DelBST*/
voidmain()
intflag=0;
intn,t=1;
while(t)
********************\n"
1.编写函数,建立有序表,采用折半查找实现某一已知的关键字的查找;
\n"
2.随机产生一组关键字,利用二叉排序树的插入算法建立二叉排序树;
3.编写函数,在随机产生的二叉排序树中删除某一指定关键字元素;
4.结束\n"
请输入相应的选项:
n);
switch(n)
case1:
RecordListl;
intlocate;
KeyTypek;
createli
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验 查找 数据结构 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)