如果能在关键字与记录保存的位置之间建立一种联系,则可以不经过比较,直接对关键字进行计算得出记录的位置,再到相应位置去读取数据即可。
将这种关键字与记录保存位置之间的对应关系称为散列函数,将这种方式建立的表称为散列表。
#include<stdio.h>
#define HASH_LEN 13
#define TABLE_LEN 8
int data[TABLE_LEN] = {69,65,90,37,92,6,28,54};
int hash[HASH_LEN] = {0};
void InsertHash(int hash[],int m,int data)
{
int i;
i = data % 13;
while(hash[i])
i = (++i) % m;
hash[i] = data;
}
void CreateHash(int hash[],int m,int data[],int n)
{
int i;
for(i=0;i<n;i++)
InsertHash(hash,m,data[i]);
}
int HashSearch(int hash[],int m,int key)
{
int i;
i = key % 13;
while(hash[i] && hash[i] != key)
i = (++i) % m;
if(hash[i] == 0)
return -1;
else
return i;
}
int main()
{
int key,i,pos;
CreateHash(hash,HASH_LEN,data,TABLE_LEN);
printf("hash result:");
for(i=0;i<HASH_LEN;i++)
printf("%ld ",hash[i]);
printf("\n");
printf("enter key for search:");
scanf("%d",&key);
pos = HashSearch(hash,HASH_LEN,key);
if(pos > 0)
printf("search success location is %d \n",pos);
else
printf("search failed\n");
return 0;
}