1305080姓名实验报告09Word下载.docx
- 文档编号:17545716
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:9
- 大小:16.99KB
1305080姓名实验报告09Word下载.docx
《1305080姓名实验报告09Word下载.docx》由会员分享,可在线阅读,更多相关《1305080姓名实验报告09Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
得分
合计
上机表现
积极出勤、遵守纪律
按要求完成设计任务
30分
程序与报告
程序代码规范、功能正确
报告详实完整、体现收获
70分
说明:
评阅教师:
赵卿松
日期:
2015年6月13日
实验内容
实验内容:
二叉排序树。
任意给定一组数据,设计一个算法,建立一棵二叉排序树,对它进行查找、插入、删除等操作。
实验说明:
二叉排序树存储结构如下:
二叉排序树插入算法伪代码如下:
二叉排序树中删除一个结点f的左孩子结点p算法伪代码如下:
#include<
stdio.1;
}
elseif(k==p->
key)
return0;
elseif(k<
p->
returnInsertBST(p->
lchild,k);
else
rchild,k);
BSTNode*CreateBST(KeyTypeA[],intn)创建二叉排序树{
BSTNode*bt=NULL;
inti=0;
while(i<
n)
{
InsertBST(bt,A[i]);
i++;
returnbt;
BSTNode*SearchBST(BSTNode*bt,KeyTypek)
if(bt==NULL||bt->
key==k)
if(k<
bt->
returnSearchBST(bt->
lchild,k);
rchild,k);
voidcharu(BSTNode*&
bt)
KeyTypen;
printf("
请输入你要插入的元素:
"
);
scanf("
%d"
&
n);
InsertBST(bt,n);
voidchazhao(BSTNode*bt)
system("
cls"
清屏
intk;
BSTNode*a;
请输入要查找的元素:
k);
a=SearchBST(bt,k);
if(a!
=NULL)
找到了元素%d\n"
k);
找不到该元素\n"
voidshuru(BSTNode*&
e,int&
intm,a[Max]={0},i;
请输入二叉排序树中元素的个数:
\n"
m);
n=m;
for(i=0;
i<
n;
i++)
请输入二叉排序树的第%d个元素的个数:
i+1);
a[i]);
e=CreateBST(a,n);
voidprint1(BSTNode*b)
if(b!
print1(b->
lchild);
%d"
b->
key);
rchild);
voidprint(BSTNode*b)
print1(b);
intDeleteBST(BSTNode*&
T,intx)
{从二叉树排序树T中删除任意结点,其关键字为x
BSTNode*p,*q,*pParent,*pChileNode;
p=T;
从根结点开始查找
pParent=NULL;
T的双亲为NULL
while(p)开始查找关键字为x的结点p,及双亲pParent{
if(x==p->
break;
pParent=p;
p=x>
p->
key?
rchild:
lchild;
if(p==NULL)
要删除的结点不存在\n"
}至此已找到目标结点p
pChileNode=p存在的孩子或NULL,左右都存在时,取左
pChileNode=p->
lchild!
=NULL?
lchild:
rchild;
if(p->
lchild==NULL||p->
lchild==NULL)
if(pParent==NULL)
T=pChileNode;
if(p==pParent->
lchild)
pParent->
lchild=pChileNode;
rchild=pChileNode;
free(p);
释放空间
}当2个孩子都存在时
{pChileNode已指向p->
lchild
q=p;
while(pChileNode->
rchild)
{在p的左字树中查找中序p的前驱pChileNode,q为其双亲q=pChileNode;
pChileNode=pChileNode->
key=pChileNode->
key;
p的前驱pChileNodede的关键值赋给pif(q!
=p)将删除p转化为删除pChileNodede(最多只有左子树)结点{
q->
rchild=pChileNode->
p的左子树有右孩子
lchild=pChileNode->
p的左子树有右孩子
free(pChileNode);
return1;
voidshanchu(BSTNode*&
intk,i;
请输入你要查找的元素"
i=DeleteBST(bt,k);
if(i==0)
删除不成功!
删除成功!
voidmenu()
printf(
\n********************************菜单**********************************\n\n"
chara[50]="
1.输入二叉排序树"
;
charb[50]="
2.查找"
charc[50]="
3.删除"
chard[50]="
4.插入"
chare[50]="
5.显示"
charf[50]="
6.退出"
\t%-35s%-35s\n\n\t%-35s%-35s\n\n\t%-35s%-35s\n\n"
a,b,c,d,e,f);
********************************************************************************\n"
请选择你要执行的操作对应的序号:
voidmain()
intn,a[Max]={0};
----二叉排序树----\n\n"
\t本程序可以实现对一组数据进行查找、插入、删除等操作。
\n\n"
BSTNode*e=NULL;
for(;
)*无限循环*
按任意键进入主菜单。
getch();
menu();
*显示菜单*
inti=100;
*初始化*
fflush(stdin);
*清空输入缓冲区*
&
i);
if(i>
=0&
&
i<
=6)
switch(i)
case1:
shuru(e,n);
*输入记录*
case2:
chazhao(e);
case3:
shanchu(e);
case4:
charu(e);
case5:
print(e);
case6:
exit(0);
*退出*
不要乱按!
!
实验总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1305080 姓名 实验 报告 09