查找算法的实现(C语言版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五查找的实现

一、实验目的

1.通过实验掌握查找的基本概念;

2.掌握顺序查找算法与实现;

3.掌握折半查找算法与实现。

二、实验要求

1.认真阅读和掌握本实验的参考程序。

2.保存程序的运行结果,并结合程序进行分析。

三、实验内容

1、建立一个线性表,对表中数据元素存放的先后次序没有任何要求。输入待查数据元素的关键字进行查找。为了简化算法,数据元素只含一个整型关键字字段,数据元素的其余数据部分忽略不考虑。建议采用前哨的作用,以提高查找效率。

2、查找表的存储结构为有序表,输入待查数据元素的关键字利用折半查找方法进行查找。此程序中要求对整型量关键字数据的输入按从小到大排序输入。一、顺序查找

顺序查找代码:

#include"stdio.h"

#include"stdlib.h"

typedef struct node{

int key;

}keynode;

typedef struct Node{

keynode r[50];

int length;

}list,*sqlist;

int Createsqlist(sqlist s)

{

int i;

printf("请输入您要输入的数据的个数:\n");

scanf("%d",&(s->length));

printf("请输入您想输入的%d个数据;\n\n",s->length);

for(i=0;ilength;i++)

scanf("%d",&(s->r[i].key));

printf("\n");

printf("您所输入的数据为:\n\n");

for(i=0;ilength;i++)

printf("%-5d",s->r[i].key);

printf("\n\n");

return 1;

}

int searchsqlist(sqlist s,int k)

{

int i=0;

s->r[s->length].key=k;

while(s->r[i].key!=k)

{

i++;

}

if(i==s->length)

{

printf("该表中没有您要查找的数据!\n");

return -1;

}

else

return i+1;

}

sqlist Initlist(void)

{

sqlist p;

p=(sqlist)malloc(sizeof(list));

if(p)

return p;

else

return NULL;

}

main()

{

int keyplace,keynum;//

sqlist T;//

T=Initlist();

Createsqlist(T);

printf("请输入您想要查找的数据的关键字:\n\n");

scanf("%d",&keynum);

printf("\n");

keyplace=searchsqlist(T,keynum);

printf("您要查找的数据的位置为:\n\n%d\n\n",keyplace);

return 2;

}

顺序查找的运行结果:

二、折半查找

折半查找代码:

#include"stdio.h"

#include"stdlib.h"

typedef struct node{

int key;

}keynode;

typedef struct Node{

keynode r[50];

int length;

}list,*sqlist;

int Createsqlist(sqlist s)

{

int i;

printf("请输入您要输入的数据的个数:\n");

scanf("%d",&(s->length));

printf("请由大到小输入%d个您想输入的个数据;\n\n",s->length);

for(i=0;ilength;i++)

scanf("%d",&(s->r[i].key));

printf("\n");

printf("您所输入的数据为:\n\n");

for(i=0;ilength;i++)

printf("%-5d",s->r[i].key);

printf("\n\n");

return 1;

}

int searchsqlist(sqlist s,int k)

{

int low,mid,high;

low=0;

high=s->length-1;

while(low<=high)

{

mid=(low+high)/2;

if(s->r[mid].key==k)

return mid+1;

else if(s->r[mid].key>k)

high=mid-1;

else

low=mid+1;

}

printf("该表中没有您要查找的数据!\n");

return -1;

}

sqlist Initlist(void)

{

sqlist p;

p=(sqlist)malloc(sizeof(list));

if(p)

return p;

else

return NULL;

}

main()

{

int keyplace,keynum;//

sqlist T;//

T=Initlist();

Createsqlist(T);

printf("请输入您想要查找的数据的关键字:\n\n");

scanf("%d",&keynum);

printf("\n");

keyplace=searchsqlist(T,keynum);

printf("您要查找的数据的位置为:\n\n%d\n\n",keyplace);

return 2;

}

相关文档
最新文档