#include <stdio.h>
#include <stdlib.h>
#define HASHSIZE 12
#define NULLKEY -32768
typedef struct
{
int *elem; //数据元素的基址,动态分配数组
int count; //当前数据元素的个数
}HashTable;
int InitHashTable(HashTable *H)
{
int i;
H->count=HASHSIZE;
H->elem=(int *)malloc(HASHSIZE*sizeof(int));
if(!H->elem)
{
return -1;
}
for(i=0;i<HASHSIZE;i++)
{
H->elem[i]=NULLKEY;
}
return 0;
}
//使用除留余数法
int Hash(int key)
{
return key%HASHSIZE;
}
//插入关键字到散列表
void InsertHash(HashTable *H,int key)
{
int addr;
addr=Hash(key);
while(H->elem[addr]!=NULLKEY)//如果不为空,则冲突出现
{
addr=(addr+1)%HASHSIZE;
}
H->elem[addr]=key;
}
//散列表查找关键字
int SearchHash(HashTable H,int key,int *addr)
{
*addr=Hash(key);
while(H.elem[*addr]!=key)
{
*addr=(*addr+1)%HASHSIZE;
if(H.elem[*addr]==NULLKEY||*addr==Hash(key))
{
return -1;
}
}
return 0;
}
void main()
{
int c,addr;
HashTable H;
InitHashTable(&H);
printf("请输入数字:\n");
scanf("%d",&c);
do
{
InsertHash(&H,c);
scanf("%d",&c);
}while(c!=0);
printf("请输入要查找的数字:\n");
scanf("%d",&c);
if(SearchHash(H,c,&addr)==0)
{
printf("\n查找成功,位置在%d\n",addr);
}
else
{
printf("\n查找失败!\n");
}
}
Hash查找
最新推荐文章于 2022-07-03 22:14:02 发布