实验五 查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东工商学院
《数据结构》实验指导及报告书 2012 / 2013 学年第上学期
姓名:
学号:
班级:
指导教师:
信电学院
2012
实验五查找
一、实验目的
1、掌握查找表、动态查找表、静态查找表和平均查找长度的概念。
2、掌握线性表中顺序查找和折半查找的方法。
3、学会哈希函数的构造方法,处理冲突的机制以及哈希表的查找。
二、实验预习
说明以下概念
1、顺序查找:
2、折半查找:
3、哈希函数:
4、冲突及处理:
三、实验内容和要求
依据顺序查找算法和折半查找算法的特点,对下面的两个查找表选择一个合适的算法,设计出完整的C源程序。并完成问题:
查找表1 : { 8 ,15 ,19 ,26 ,33 ,41 ,47 ,52 ,64 ,90 } ,查找key = 41 查找表2 : {12 ,76 ,29 ,15 ,62 ,35 ,33 ,89 ,48 ,20 } ,查找key =35
查找key=41的算法:折半查找比较次数:
查找key=35的算法:顺序查找比较次数:
顺序查找算法算法实现代码
#include
#include
int main(){
int n,s,q,i,k;//n为输入的元素个数,s为所查找的元素,k为该元素在数组中的位置
int a[100];
printf("input number:");
scanf("%d",&n);
for(i=1;i printf("input NO%d:",i); scanf("%d",&q); a[i]=q; } printf("input element:"); scanf("%d",&s); for(i=n;i>0;i--){ a[0]=s; if(a[i]==s){ k=i; break; } } if(k!=0) printf("the number is :%d",k); else printf("not exist!"); return 0; } 折半查找算法算法实现代码 #include #include #define INIT_SIZE 5 typedef int Elem; typedef struct{ int Tsize; Elem *list; int length; }SSTable; int search_l(Elem e,SSTable L); void create_l(SSTable* L,int n); int search_l(Elem e,SSTable L){ int low,high,mid; low=1; high=L.length; while(low<=high){ mid=(high+low)/2; if(L.list[mid]==e) return mid; else if(L.list[mid]>e) high=mid-1; else low=mid+1; } return 0; } void create_l(SSTable* L,int n){ int i; L->length=n; L->Tsize=INIT_SIZE; L->list=(Elem*)malloc(INIT_SIZE*sizeof(Elem)); for(;;){ if(L->length>=L->Tsize){ L->list=(Elem*)malloc((INIT_SIZE+L->Tsize)*sizeof(Elem)); L->Tsize=L->Tsize+INIT_SIZE; }else break; } for(i=1;i<=L->length;i++){ int q; printf("input value of NO%d:",i); scanf("%d",&q); L->list[i]=q; }return 0; } int main() { int n,s,k; SSTable List; printf("input the amount of list:"); scanf("%d",&n); create_l(&List,n); printf("intput the searching elment:"); scanf("%d",&s); k=search_l(s,List); if(k!=0) printf("the number is %d",k); else printf("not exist!"); return 0; } 四、实验小结 本次试验调试出一个内存的不能写入的错误:对数组不能直接进行键盘scanf写入操作!否则导致严重内存错误 五、教师评语