1 hashlink.c
#include<stdio.h>
#include<stdlib.h>
#define HASH 10
typedef struct node
{
int data;
struct node* next;
}NODE,*linklist;
linklist creatnode(int data)
{
linklist p=malloc(sizeof(NODE));
if(p==NULL)
{
printf("申请空间失败\n");
return NULL;
}
p->data=data;
p->next=NULL;
return p;
}
int hashaddress(int data)
{
return data%HASH;
}
void inithashtable(linklist hashtable[])
{
int i;
for(i=0;i<HASH;i++)
hashtable[i]=NULL;
}
linklist searchhashtable(linklist hashtable[],int data)
{
linklist p=NULL;
int addr=hashaddress(data);
if(hashtable[addr]==NULL)
return NULL;
p=hashtable[addr];
while(p!=NULL)
{
if(p->data==data)
return p;
p=p->next;
}
if(p==NULL)
return NULL;
}
void showhashtable(linklist hashtable[])
{
linklist p;
int i;
for(i=0;i<HASH;i++)
{
p=hashtable[i];
printf("哈希地址=%d\n",i);
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
}
void freehashtable(linklist hashtable[])
{
linklist p=NULL,q;
int i;
for(i=0;i<HASH;i++)
{
p=hashtable[i];
q=p;
while(p!=NULL)
{
q=q->next;
free(p);
p=q;
}
}
}
int main()
{
int i,data,j;
linklist hashtable[HASH];
linklist p=NULL;
inithashtable(hashtable);
for(i=0;i<100;i++)
{
data=random()%1000;
p=creatnode(data);
j=hashaddress(data);
if(hashtable[j]==NULL)
hashtable[j]=p;
else
{
p->next=hashtable[j];
hashtable[j]=p;
}
}
showhashtable(hashtable);
printf("请输入查找的数据\n");
scanf("%d",&data);
p=searchhashtable(hashtable,data);
if(p==NULL)
printf("未找到数据\n");
else
printf("查找的数据:%d\n",p->data);
freehashtable(hashtable);
return 0;
}