数据结构查找实验Word格式.docx
- 文档编号:22203804
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:10
- 大小:219.40KB
数据结构查找实验Word格式.docx
《数据结构查找实验Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构查找实验Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
while(i<
n&
&
A[i]!
=x)//找遍且找到
i++;
if(i>
=n)
return-1;
else
returni;
}
voidmain()
inta[N]={2,38,42,44,25,12,3,1,23,89},d,i,k;
printf("
A数组下标:
\n"
);
for(i=0;
i<
N;
i++)
printf("
%d"
i);
A数组值:
a[i]);
\n输入要查找的值:
"
scanf("
%d"
&
d);
k=search(a,d,N);
if(k>
=0)
a[%d]=%d\n"
k,d);
else
printf("
%d未找到\n"
d);
3.实验结果
(2)实验题目二:
编写一个算法,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。
1.要点分析:
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.程序源代码:
#include<
string.h>
#definemaxnum100
intinput(int*);
//输入数据
intsearch(int*,int,int);
//查找插入位置
voidplug(int*,int,int);
//插入数据
intdata[maxnum],m;
intinsert=1;
m=input(data);
请输入要插入的数据:
\n"
//输入插入的数据
scanf("
data);
//输入插入的数据存放在data数组0号位置
insert=search(data,1,m);
//找到数据要插入的位置
plug(data,insert,m);
//运用递归的方法插入数据
最后结果:
for(insert=1;
insert<
=m+1;
insert++)
*(data+insert));
getchar();
intinput(int*data)
inti,m;
请输入该有序表的长度:
m);
请按大小顺序输入%d个数据\n"
m);
for(i=1;
=m;
scanf("
data+i);
returnm;
intsearch(int*data,intlow,inthigh)
intmid;
if(low>
high)//没有找到插入位置
returnlow;
{
mid=(low+high)/2;
if(*(data+mid)==*data)
returnmid;
elseif(*(data+mid)<
*data)
low=mid+1;
elseif(*(data+mid)>
high=mid-1;
}
search(data,low,high);
voidplug(int*data,intinsert,intm)//移动并插入数据
inti;
for(i=m;
i>
=insert;
i--)
*(data+i+1)=*(data+i);
*(data+insert)=*data;
(三)实验题目:
设计一个算法,读入一串整数,构造其对应的二叉排序树
1.要点分析
二叉排序树的递归式定义。
二叉排序树又称二叉查找树,它可以是一棵空树,若非空时具有下述性质:
1、若根结点的左子树非空,则左子树上所有结点的关键字值均小于等于根结点的关键字值。
2、若根结点的右子树非空,则右子树上所有结点的关键字值均大于等于根结点的关键字值。
3、根结点的左、右子树也分别为二叉排序树。
二叉排序树建立说明:
当需要插入一个节点到二叉排序树时,需要先找到它的父节点。
其实它就是用插入的节点不断的和每一个节点比较(第一次当然是和根节点比较啦),如果小于等于则进入左边子树,再与左边子树的根节点比较,直到找到它要放的位置,
否则进入右子树,进行上述操作
2.源程序代码
malloc.h>
typedefstructnode//二叉排序树的结点类型
intkey;
structnode*lchild,*rchild;
}BSTNode;
typedefBSTNode*BSTree;
voidinsertBST(BSTree*prt,intkey)
BSTNode*f,*p=*prt;
while(p)//判断数据插入的位置
if(p->
key==key)//树中已有此节点无需插入
return;
f=p;
p=(key<
(p->
key))?
p->
lchild:
rchild;
}
p=(BSTNode*)malloc(sizeof(BSTNode));
//建立新的结点
p->
key=key;
lchild=p->
rchild=NULL;
if(*prt==NULL)
*prt=p;
elseif(key<
f->
key)
f->
lchild=p;
rchild=p;
BSTreecreateBST(void)
BSTreeT=NULL;
请输入根节点\n"
//先建立一个根节点
key);
while(key)
insertBST(&
T,key);
请输入一个数据以0结束:
returnT;
voidinorder(BSTreeT)//中序遍历
if(T)
inorder(T->
lchild);
%3d"
T->
rchild);
BSTreeT;
T=createBST();
中序遍历结果:
inorder(T);
三.个人小结
通过这次实验,我对于各类查找的算法都有了很清晰的认识,在实验的过程中我深刻地体会到了作为一个合格的程序员,不仅仅要理解算法还要学会对其灵活运用,一定要多动手,在实践的过程中你会遇到各种意想不到的意外,当运用自己的办法把问题都解决好了之后,自己的编程能力也有了一定的提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 查找 实验