数据结构实验查找算法的实现Word文件下载.docx
- 文档编号:20428971
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:14
- 大小:33.61KB
数据结构实验查找算法的实现Word文件下载.docx
《数据结构实验查找算法的实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验查找算法的实现Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
intbf;
structBSTnode*lchild,*rchild;
}BSTnode,*BSTree;
voidInitBSTree(BSTree&
T)
{T=NULL;
}
voidR_Rotate(BSTree&
p)
{BSTnode*lc;
lc=p->
lchild;
p->
lchild=lc->
rchild;
lc->
rchild=p;
p=lc;
voidL_Rotate(BSTree&
{BSTnode*rc;
rc=p->
rchild=rc->
rc->
lchild=p;
p=rc;
voidLeftbalance(BSTree&
{BSTnode*lc,*rd;
lc=T->
switch(lc->
bf)
{
case+1:
T->
bf=lc->
bf=0;
R_Rotate(T);
break;
case-1:
rd=lc->
switch(rd->
{case1:
bf=-1;
lc->
break;
case0:
T->
case-1:
lc->
bf=1;
}
rd->
L_Rotate(T->
lchild);
R_Rotate(T);
voidRbalance(BSTree&
{BSTnode*lc,*ld;
ld=lc->
switch(ld->
{case1:
ld->
R_Rotate(T->
rchild);
L_Rotate(T);
case-1:
L_Rotate(T);
break;
intInsertAVL(BSTree&
T,ElemTypee,bool&
taller)
{if(!
{T=(BSTree)malloc(sizeof(BSTnode));
data=e;
lchild=T->
rchild=NULL;
taller=true;
else
{if(EQ(e.key,T->
data.key))
{taller=false;
cout<
<
"
结点"
e.key<
不存在。
endl;
return0;
if(LT(e.key,T->
{if(!
InsertAVL(T->
lchild,e,taller))
{return0;
}
if(taller)
switch(T->
{case1:
Leftbalance(T);
taller=false;
case0:
bf=+1;
{if(!
rchild,e,taller))
{return0;
}
{case1:
Rbalance(T);
return1;
boolSearchBST(BSTreeT,ElemTypekey,BSTreef,BSTree&
{p=f;
结点不存在。
returnfalse;
elseif(EQ(key.key,T->
data.key))
{p=T;
查找成功,存在结点"
;
p->
data.key<
returntrue;
elseif(LT(key.key,T->
returnSearchBST(T->
lchild,key,T,p);
rchild,key,T,p);
voidLeftbalance_div(BSTree&
p,int&
shorter)
{BSTreep1,p2;
if(p->
bf==+1)//p结点的左子树高,删除结点后p的bf减1,树变矮
{p->
shorter=1;
elseif(p->
bf==0)//p结点左、右子树等高,删除结点后p的bf减1,树高不变
shorter=0;
else
{p1=p->
//p1指向p的右子树
if(p1->
bf==0)//p1结点左、右子树等高,删除结点后p的bf为-2,进行左旋处理,树高不变
{L_Rotate(p);
p1->
p->
elseif(p1->
bf==-1)//p1的右子树高,左旋处理后,树变矮
p1->
bf=p->
{p2=p1->
lchild=p2->
p2->
rchild=p1;
rchild=p2->
if(p2->
bf==0)
{p->
elseif(p2->
bf==-1)
p2->
p=p2;
shorter=1;
voidRbalance_div(BSTree&
{BSTreep1,p2;
shorter=1;
{p1=p->
{R_Rotate(p);
bf==+1)
{R_Rotate(p);
lchild=p1;
if(p2->
bf==1)
voidDelete(BSTreeq,BSTree&
r,int&
{if(r->
rchild==NULL)
{q->
data=r->
data;
q=r;
r=r->
free(q);
{Delete(q,r->
rchild,shorter);
if(shorter==1)
Rbalance_div(r,shorter);
ElemTypeDeleteAVL(BSTree&
p,ElemTypekey,int&
{ElemTypek,a,b;
a.key=1;
b.key=0;
BSTreeq;
if(p==NULL)
{cout<
returnb;
elseif(LT(key.key,p->
data.key))//在p的左子树中进行删除
{k=DeleteAVL(p->
lchild,key,shorter);
Leftbalance_div(p,shorter);
returnk;
elseif(LQ(key.key,p->
data.key))//在p的右子树中进行删除
rchild,key,shorter);
if(shorter==1)
Rbalance_div(p,shorter);
q=p;
rchild==NULL)//右子树空则只需重接它的左子树
{p=p->
free(q);
lchild==NULL)//左子树空则只需重接它的右子树
{p=p->
{Delete(q,q->
lchild,shorter);
p=q;
returna;
voidPrint_BSTTree(BSTreeT,inti)
{if(T)
{if(T->
rchild)
Print_BSTTree(T->
rchild,i+1);
for(intj=1;
j<
=i;
j++)
"
cout<
T->
if(T->
lchild)
Print_BSTTree(T->
lchild,i+1);
intmain()
{BSTreeT;
ElemTypee;
InitBSTree(T);
booltall=false;
boolchoice=true;
chary;
while(choice)
输入要插入结点(数字):
cin>
>
e.key;
InsertAVL(T,e,tall);
Print_BSTTree(T,0);
是否继续,是选y,否选n:
y;
if(y=='
Y'
||y=='
y'
)
choice=true;
elsechoice=false;
BSTreef,p;
输入要查找的结点:
SearchBST(T,e,f,p);
是否继续,是选y,否选n:
intshorter;
输入要删除的结点:
DeleteAVL(T,e,shorter);
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 查找 算法 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)