#include <stdlib.h>
typedef struct list
{
struct list *next;
int value;
}LIST,*LIST_POINT;
//散列函数
int HASH(int x)
{
return x%17;
}
void CHAINED_HASH_INSERT(LIST_POINT T,int x)
{
int k=HASH(x);
LIST_POINT l=(LIST_POINT)malloc(sizeof(LIST));
l->value=x;
if(T[k].next!=NULL)
{
l->next=T[k].next;
T[k].next=l;
}
else
{
T[k].next=l;
l->next=NULL;
}
}
bool CHAINED_HASH_SEARCH(LIST_POINT T,int x)
{
LIST_POINT l;
int k=HASH(x);
l=&T[k];
while(l->next!=NULL)
{
if(l->next->value==x)
return true;
else
l=l->next;
}
return false;
}
int CHAINED_HASH_DELETE(LIST_POINT T,int x)
{
LIST_POINT l;
int k=HASH(x);
l=&T[k];
while(l->next!=NULL)
{
if(l->next->value==x)
{
LIST_POINT list;
list=l->next;
l->next=list->next;
list->next=NULL;
free(list);
return true;
}
else
{
l=l->next;
}
}
return false;
}
void CHAINED_HASH_DELETE_ALL(LIST T)
{
LIST_POINT l;
while(T.next!=NULL)
{
l=T.next;
T.next=l->next;
l->next=NULL;
free(l);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LIST l[17];
int i=0;
for(i=0;i<17;++i)
{
l[i].next=NULL;
}
CHAINED_HASH_INSERT(l,18);
if(CHAINED_HASH_SEARCH(l,18))
printf("got it\n");
else
printf("there is no 18\n");
CHAINED_HASH_DELETE(l,18);
for(i=0;i<17;++i)
{
CHAINED_HASH_DELETE_ALL(l[i]);
}
system("pause");
return 0;
}