数据结构:查找实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验报告
课程数据结构实验实验名称查找
系别计算机学院专业班级组别_____________
一.实验目的:
1.掌握顺序查找,二分查找的算法
2.能运用线性表的查找方法解决实际问题
二.实验内容
(-)实验题目一:写给出一个无序表A中采用顺序查找算法查找值为x的元素的算法
1.要点分析:
顺序查找首先从表的先端开始,依次与给定值x进行比较,直达找到与其相等的元素值,返回该元素值的下标,查找成功。否则给出查找失败信息。
2.程序源代码:
#include
#define N 10
int search(int A[],int x,int n)
{
int i=0;
while(i i++; if(i>=n) return -1; else return i; } void main() { int a[N]={2,38,42,44,25,12,3,1,23,89},d,i,k; printf("A数组下标:\n"); for(i=0;i printf("%d ",i); printf("\n"); printf("A数组值:\n"); for(i=0;i printf("%d ",a[i]); printf("\n输入要查找的值:"); scanf("%d",&d); k=search(a,d,N); if(k>=0) printf("a[%d]=%d\n",k,d); else printf("%d未找到\n",d); } 3.实验结果 (二)实验题目二:编写一个算法,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。 1.要点分析: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。2.程序源代码: #include #include #define maxnum 100 int input(int *); //输入数据 int search(int *,int,int); //查找插入位置 void plug(int *,int,int); //插入数据 void main() { int data[maxnum],m; int insert=1; m=input(data); printf("请输入要插入的数据: \n"); //输入插入的数据 scanf("%d",data); //输入插入的数据存放在data数组0号位置insert=search(data,1,m); //找到数据要插入的位置 plug(data,insert,m); //运用递归的方法插入数据 printf("最后结果: \n"); for(insert=1;insert<=m+1;insert++) printf("%d ",*(data+insert)); getchar(); } int input(int * data) { int i,m; printf("请输入该有序表的长度: \n"); scanf("%d",&m); printf("请按大小顺序输入%d个数据 \n",m); for(i=1;i<=m;i++) scanf("%d",data+i); return m; } int search(int *data,int low,int high) { int mid; if(low>high) //没有找到插入位置 return low; else { mid=(low+high)/2; if(*(data+mid)== *data) return mid; else if(*(data+mid)<*data) low=mid+1; else if(*(data+mid)>*data) high=mid-1; } search(data,low,high); } void plug(int *data,int insert,int m) //移动并插入数据{ int i; for(i=m;i>=insert;i--) *(data+i+1)=*(data+i); *(data+insert)=*data; } 3.实验结果 (三)实验题目:设计一个算法,读入一串整数,构造其对应的二叉排序树 1.要点分析 二叉排序树的递归式定义。 二叉排序树又称二叉查找树,它可以是一棵空树,若非空时具有下述性质: 1、若根结点的左子树非空,则左子树上所有结点的关键字值均小于等于根结点的关键字值。 2、若根结点的右子树非空,则右子树上所有结点的关键字值均大于等于根结点的关键字值。 3、根结点的左、右子树也分别为二叉排序树。 二叉排序树建立说明: 当需要插入一个节点到二叉排序树时,需要先找到它的父节点。 其实它就是用插入的节点不断的和每一个节点比较(第一次当然是和根节点比较啦),如果小于等于则进入左边子树,再与左边子树的根节点比较,直到找到它要放的位置, 否则进入右子树,进行上述操作 2.源程序代码 #include #include typedef struct node //二叉排序树的结点类型