#define HASHSIZE 197
typedef struct node
{
int value;
struct node *next;
}mynode;
typedef struct hashtable
{
mynode *llist;
}HT;
HT myHashTable[HASHSIZE];
int main()
{
initialize();
add(2);
add(2500);
add(199);
display_hash();
getch();
return(0);
}
int initialize()
{
int i;
for(i=0;i
int add(int value)
{
int hashkey;
int i;
mynode *tempnode1, *tempnode2;
hashkey=value%HASHSIZE;
printf("\nHashkey : [%d]\n", hashkey);
if(myHashTable[hashkey].llist==NULL)
{
//This hash bucket is empty, add the first element!
tempnode1 = malloc(sizeof(mynode));
tempnode1->value=value;
tempnode1->next=NULL;
myHashTable[hashkey].llist=tempnode1;
}
else
{
//This hash bucket already has some items. Add to it at the end.
//Check if this element is already there?
for(tempnode1 = myHashTable[hashkey].llist;
tempnode1!=NULL; tempnode1=tempnode1->next)
{
if(tempnode1->value==value)
{
printf("\nThis value [%d] already exists in the Hash!\n", value);
return(1);
}
}
tempnode2 = malloc(sizeof(mynode));
tempnode2->value = value;
tempnode2->next=NULL;
tempnode1=tempnode2;
}
return(1);
}
int display_hash()
{
int i;
mynode *tempnode;
for(i=0;i (empty)\n",i);
}
else
{
printf("\nmyHashTable[%d].llist -> ",i);
for(tempnode=myHashTable[i].llist;
tempnode!=NULL;tempnode=tempnode->next)
{
printf("[%d] -> ",tempnode->value);
}
printf("(end)\n");
}
}//for
return(0);
}
And here is the output
myHashTable[0].llist -> (empty)
myHashTable[1].llist -> (empty)
myHashTable[2].llist -> [2] -> [199] -> (end)
..
myHashTable[135].llist -> (empty)
myHashTable[136].llist -> [2500] -> (end)
No comments:
Post a Comment