查找算法的实现的实验报告

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

{ 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;ilength;i++)

{ flag=0;

for(j=1;jlength-i+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

相关文档
最新文档