c语言 顺序查找 折半查找
数据结构实验报告课程院 姓 系 名
数据结构
_ 实验名称专业班级 学 号
查找实验地点 实验时间 批改日期
指导老师
实验成绩
一.实验目的1. 熟悉静态查找的相关算法
二.实验内容及要求1. 实现顺序表的查找算法 2. 实现有序表的折半查找算法
三. 实验过程及结果 实验过程: 源程序: 1、顺序查找: #include <stdio.h> #define MAX_SIZE 100
typedef struct{ int key; }element;
element list[MAX_SIZE]; int seqsearch(element list[],int searchnum,int num);
int main() { int i,num,searchnum,k;
c语言 顺序查找 折半查找
printf("请输入元素的个数:"); scanf("%d",&num); printf("请输入元素:\n"); for(i=0;i<num;i++) { scanf("%d",&list[i].key); } while(1) { printf("请输入要查询的数据元素:"); scanf("%d",&searchnum); k=seqsearch(list,searchnum,num); if(k!=-1) { printf("所查询元素的下标为:"); printf("%d\n",k);
} else printf("查询元素不存在。\n"); } return 0; }
int seqsearch(element list[],int searchnum,int num)
c语言 顺序查找 折半查找
{ int j; list[num].key=searchnum; for(j=0;list[j].key!=searchnum;j++) ; return j<num?j:-1; }
2、折半查找: #include <stdio.h> #define MAX_SIZE 100 #define COMPARE(a,b) (a)>(b)?1:(a)==(b)?0:-1 typedef struct{ int key; }element; element list[MAX_SIZE]; int binsearch(element list[],int searchnum,int num); int main() { int i,num,searchnum,k; printf("请输入元素的个数:"); scanf("%d",&num); printf("请输入元素:\n"); for(i=0;i<num;i++) { scanf("%d",&list[i].key); } while(1) { printf("请输入要查询的数据元素:"); scanf("%d",&searchnum); k=binsearch(list,searchnum,num); if(k!=-1) { printf("所查询元素的下标为:"); printf("%d\n",k); } else printf("查询元素不存在。\n"); } return 0; } int binsearch(element list[],int searchnum,int num) { int left=0,right=num-1,middle; while(left<=right) { middle=(left+right)/2;
c语言 顺序查找 折半查找
switch(COMPARE(list[middle].key,searchnum)) { case 1:right=middle-1;break; case 0:return middle; case -1:left=middle+1; } } return -1; } 实验结果:
四.实验中的问题及心得通过本次实验,加深了我对查找表的认识。但是,实验中也出现了问题,程序 循环不能良好退出。希望经过以后的学习我能解决这些问题。
