实验五 查找

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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写入操作!否则导致严重内存错误

五、教师评语

相关文档
最新文档