DDS Hashing: Linear Probing
DDS Hashing: Linear Probing
HASHING
LINEAR PROBING
Initialize
void init()
{
for(i=0;i<size;i++)
h[i]=-1;
}
Insert
void insert(int value)
{
k=value%size;
if(h[k]==-1)
{
h[k]=value;
printf("%d element inserted at %d position\n",value,k);
}
else
{
for(i=0;i<size;i++)
{
int key=(k+i)%size;
if(h[key]==-1)
{
h[key]=value;
printf("%d element inserted at %d position\n",value,key);
break;
}
}
}
}
Delete
void del(int value)
{
k=value%size;
if(h[k]==value)
{
printf("deleted element=%d\n",value);
h[k]=-1;
}
else
{
for(i=0;i<size;i++)
{
int key=(k+i)%size;
if(h[key]==value)
{
printf("deleted element=%d\n",h[key]);
h[key]=-1;
break;
}
}
if(i==size)
printf("Element does not exist");
}
}
Search
void search(int value)
{
k=value%size;
if(h[k]==value)
printf("%d element found at %d position\n",value,k);
else
{
for(i=0;i<size;i++)
{
int key=(k+i)%size;
if(h[key]==value)
{
printf("element found at %d position\n",key);
break;
}
}
if(i==size)
printf("Element not found");
}
}
Display
void display()
{
for(i=0;i<size;i++)
printf("h[%d]=%d\n",i,h[i]);
}
QUADRATIC PROBING
Initialize
void init()
{
for(i=0;i<size;i++)
h[i]=-1;
}
Insert
void insert(int value)
{
k=value%size;
if(h[k]==-1)
{
h[k]=value;
printf("%d element inserted at %d position\n",value,k);
}
else
{
for(i=0;i<size;i++)
{
int key=(k+i*i)%size;
if(h[key]==-1)
{
h[key]=value;
printf("%d element inserted at %d position\n",value,key);
break;
}
}
}
}
Delete
void del(int value)
{
k=value%size;
if(h[k]==value)
{
printf("deleted element=%d\n",value);
h[k]=-1;
}
else
{
for(i=0;i<size;i++)
{
int key=(k+i*i)%size;
if(h[key]==value)
{
printf("deleted element=%d\n",h[key]);
h[key]=-1;
break;
}
}
if(i==size)
printf("Element does not exist");
}
}
Search
void search(int value)
{
k=value%size;
if(h[k]==value)
printf("%d element found at %d position\n",value,k);
else
{
for(i=0;i<size;i++)
{
int key=(k+i*i)%size;
if(h[key]==value)
{
printf("element found at %d position\n",key);
break;
}
}
if(i==size)
printf("Element not found");
}
}
Display
void display()
{
for(i=0;i<size;i++)
printf("h[%d]=%d\n",i,h[i]);
}
DOUBLE HASHING
Initialize
void init()
{
for(i=0;i<size;i++)
h[i]=-1;
}
Insert
void insert(int value)
{
k=value%size;
if(ht[k]==-1)
{
ht[k]=value;
printf("%d element is inserted at %d position\n",ht[k],k);
}
else
{
int p,h1,h2,key;
p=prime();
h1=k%size;
h2=p-(k%p);
for(i=0;i<size;i++)
{
key=(h1+i*h2)%size;
if(ht[key]==-1)
{
ht[key]=value;
printf("%d element found at %d position\n",ht[key],key);
break;
}
}
}
}
Delete
void del(int value)
{
k=value%size;
if(ht[k]==value)
{
printf("deleted element=%d\n",ht[k]);
ht[k]=-1;
}
else
{
int p,h1,h2,key;
p=prime();
h1=k%size;
h2=p-(k%p);
for(i=0;i<size;i++)
{
key=(h1+i*h2)%size;
if(ht[key]==value)
{
printf("deleted element=%d\n",ht[key]);
ht[key]=-1;
break;
}
}
if(i==size)
printf("element not found\n");
}
}
Search
void search(int value)
{
k=value%size;
if(ht[k]==value)
{
printf("%d element found at %d\n",ht[k],k);
}
else
{
int p,h1,h2,key;
p=prime();
h1=k%size;
h2=p-(k%p);
for(i=0;i<size;i++)
{
key=(h1+i*h2)%size;
if(ht[key]==value)
{
printf("%d element found at %d\n",ht[key],key);
ht[key]=-1;
break;
}
}
if(i==size)
printf("element not found\n");
}
}
Display
void display()
{
for(i=0;i<size;i++)
printf("h[%d]=%d\n",i,ht[i]);
}
SEPARATE CHAINING
Structure
struct node
{
int data;
struct node *next;
}*ht[size]={NULL};
Insert
void insert(int value)
{
int i=value%size;
struct node *newnode,*temp;
newnode=(struct node*)malloc(sizeof(struct node));
newnode->data=value;
newnode->next=NULL;
if(ht[i]==NULL)
ht[i]=newnode;
else{
temp=ht[i];
while(temp->next!=NULL)
temp=temp->next;
temp->next=newnode;
}
printf("Insertion Sucess\n");
}
Delete
void del(int value)
{
struct node *temp,*temp1;
int i=value%size;
temp=ht[i];
if(temp->data==value)
{
printf("the deleted element is %d\n",temp->data);
ht[i]=temp->next;
free(temp);
}
else
{
temp=ht[i];
while(temp->data!=value&&temp->next!=NULL)
{
temp1=temp;
temp=temp->next;
}
if(temp->next==NULL)
{
printf("deleted element=%d\n",temp->data);
temp1->next=temp->next;
free(temp);
}
else
printf("no such element\n");
}
}
Search
void search(int value)
{
int i;
struct node *temp;
i=value%size;
temp =ht[i];
while(temp!=NULL)
{
if(temp->data==value)
{
printf("element found\n");
break;
}
temp=temp->next;
}
if(temp=NULL)
printf("element not found\n");
}
Display
void display()
{
int i,index;
struct node *temp;
for(i=0;i<size;i++)
{
index=i%size;
temp =ht[index];
while(temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}
}
printf("\n");
}