查找算法的实现的实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级学号姓名实验组别
试验日期室温报告日期成绩
报告内容:(目的和要求、原理、步骤、数据、计算、小结等)
实验名称:查找算法的实现
实验目的:
1.掌握顺序表上查找的实现及监视哨的作用。
2.掌握折半查找所需的条件,折半查找的过程和实现方法。
3.掌握二叉顺序树的创建过程,掌握二叉顺序树查找过程的实现。
4.掌握哈希表的基本概念,熟悉哈希函数的选择方法,掌握使用线性探测法和链地址法进
行冲突解决的方法
实验环境(硬/软件要求):
Windows 2000, Visual C++ 6.0
实验内容:
通过具体算法程序,进一步加深对各种查找方法的掌握,以及对实际应用中问题解决方法的掌握。
各查找算法的输入序列为:26 5 37 1 61 11 59 15 48 19.
输出要求:查找关键字37,给出查找结果。
实验要求
1.顺序查找
首先从键盘输入一个数据序列生成一个顺序表,然后从键盘上任意输入一个值,在顺序表中进行查找。
【C语言源程序】
#include
#define MAX 100
typedef int keytype;
typedef struct
{ keytype key;
}elemtype;
typedef struct
{ elemtype elem[MAX+1];
int length;
}SStable;
void create_seq(SStable *list);
int seq_search(SStable *list,keytype k);
void main() //主函数
{ SStable *list,table;
keytype key;
int i;
list=&table;
printf("请输入顺序表的长度:");
scanf("%d",&list->length);
create_seq(list);
printf("创建的顺序表内容:\n");
for(i=0;i
printf("list.elem[%d].key=%d\n",i+1,list->elem[i].key);
printf("输入查找关键字:");
scanf("%d",&key);
seq_search(list,key);
}
void create_seq(SStable *list) //创建顺序表list的函数
{ int i;
printf("请输入顺序表的内容:\n");
for(i=0;i
{ printf("list.elem[%d].key=",i+1);
scanf("%d",&list->elem[i].key);
}
}
int seq_search(SStable *list,keytype k) //在顺序表中查找给定的k值{ int i=0,flag=0;
while(i
{ if(list->elem[i].key==k)
{ printf("查找成功.\n");
flag=1;
printf("list.elem[%d].key=%d\n",i+1,k);
}
i++;
}
if(flag==0)
printf("没有找到数据%d!\n",k);
return(flag);
}
2.折半查找
任意输入一组数据作为个数据元素的键值,首先将此序列进行排序,然后在该有序表上进行折半查找算法进行对给定值key的查找。
【C语言源程序】
#include
#define MAX 100
typedef struct
{ int elem[MAX+1];
int length;
}Stable;
void creat_seq(Stable *list);
int sort_seq(Stable *list);
int bin_search(Stable *list,int k,int low,int high);
void main()
{ Stable *list,table;
int i,key;
list=&table;
printf("请输入线性表的长度:");
scanf("%d",&list->length);
creat_seq(list);
sort_seq(list);
printf("排序后的数据\n");
for(i=1;i<=list->length;i++)
printf("list.elem[%d].key=%d\n",i,list->elem[i]);
printf("\n请输入查找的值:");
scanf("%d",&key);
bin_search(list,key,1,list->length);
}
void creat_seq(Stable *list)
{ int i;
printf("请输入顺序表的内容:\n");
for(i=1;i<=list->length;i++)
{ printf("list.elem[%d].key=",i);
scanf("%d",&list->elem[i]);
}
}
int sort_seq(Stable *list) //冒泡法排序
{ int i,j,flag;
for(i=1;i
{ flag=0;
for(j=1;j
if(list->elem[j]>list->elem[j+1])
{ list->elem[0]=list->elem[j+1];
list->elem[j+1]=list->elem[j];
list->elem[j]=list->elem[0];
flag=1;
}
if(flag==0)return 1;
}
}
int bin_search(Stable *list,int k,int low,int high) //折半查找法的递归函数
{ int mid;
if(low>high)
{ printf("没有找到要查找的值\n");
return(0);
}
mid=(low+high)/2;
if(list->elem[mid]==k)
{ printf("查找成功\n");
printf("list[%d]=%d\n",mid,k);
return(mid);
}
else
if(list->elem[mid] return(bin_search(list,k,mid+1,high)); else