#include <stdio.h>
#include <string.h>
#include <stdlib.h>
enum{sucess,falout=-1};
typedef int datatype;
typedef struct hash
{
datatype data;
struct Node *next;
}*Hashlist;
Hashlist create_hash()
{
Hashlist s=(Hashlist)malloc(sizeof(struct hash));
if(NULL==s)
return falout;
s->data=0;
s->next=NULL;
return s;
}
int max(int m)
{
for(int i=m;i>=2;i--)
{
int flag=0;
for(int j=2;j<i;j++)
{
if(i%j==0)
{
flag=1;
break;}
}
if(flag==0)
return i;
}
}
void insert_hash(int key,Hashlist hash[],int m)
{
Hashlist s=create_hash();
int p=max( m);
int sub=key%p;
if(NULL==hash[sub])
{ hash[sub]=s;
return;}
s->data=key;
s->next=hash[sub];
hash[sub]=s;
}
void output_hash(Hashlist hash[],int m)
{
#if 1
for(int i=0;i<m;i++)
{
printf("%d:",i);
Hashlist p=hash[i];
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("NULL");
}
#endif
}
void search_hash(int key,Hashlist hash[],int p)
{
int sub=key%p;
Hashlist s=hash[sub];
while(s)
{
if(s->data=key)
{
printf("yes");
}
else
printf("NO");
}
}
int main(int argc, const char *argv[])
{
int arr[]={25,51,8,22,26,67};
int len=sizeof(arr)/sizeof(arr[0]);
int m=len*4/3;
Hashlist hash[m];
for(int i=0;i<m;i++)
{ hash[i]=NULL;
}
for(int i=0;i<m;i++)
{
insert_hash(arr[i], hash, m);
}
output(hash,m);
return 0;
}