- 实验要求:
- 用C完成算法设计和程序设计并上机调试通过;
- 建立顺序表(11,15,22,25,33,44,55,66,77,88);
- 输出顺序表;
- 写出顺序查找关键字55的过程的算法,并输出所在的位置。
5)用折半查找关键字66的过程的算法,并输出所在的位置。
6)用折半查找关键字52的过程的算法。
- 实验目的:
1)掌握各种查找方法,并能在解决实际问题时灵活应用。
2)通过实验进一步掌握散列查找时解决冲突的方法及特点。
代码:
#include<stdio.h>
#include<malloc.h>
#define MaxSize 30
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
void CreateList(SqList * &L,ElemType a[],int n)//建立顺序表
{
int i=0;
L=(SqList *)malloc(sizeof(SqList));
while(i<n)
{
L->data[i]=a[i];
i++;
}
L->length=n;
}
void DispList(SqList *L)//输出顺序表
{
for(int i=0;i<L->length;i++)
printf("%d ",L->data[i]);
printf("\n");
}
int LocateElem(SqList *L,ElemType e)//顺序查找
{
int i=0;
while(i<L->length&&L->data[i]!=e)
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
int BinSearch(SqList *L,int n,ElemType e)//折半查找
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(e==L->data[mid])
return mid+1;
if(e<L->data[mid])
high=mid-1;
else
low=mid+1;
}
return 0;
}
int main()
{
SqList *L;
ElemType b[10]={11,15,22,25,33,44,55,66,77,88};
printf("建立顺序表(11,15,22,25,33,44,55,66,77,88)\n");
CreateList(L,b,10);
printf("输出顺序表:");
DispList(L);
printf("如果查询的数据在表中可以找到返回位置信息, 否则没有找到返回 0\n");
printf("输出元素55的位置(顺序查找):%d\n",LocateElem(L,55));
printf("输出元素66的位置(折半查找):%d\n",BinSearch(L,10,66));
printf("输出元素52的位置(折半查找): %d\n",BinSearch(L,10,52));
}
运行结果:
此实验报告分别采用顺序查找和折半查找两种方法。折半查找使用的前提是有序和顺序存储。