Я просто пытаюсь реализовать quadrati c зондирование для таблиц ha sh, которые должны работать для любого размера таблицы. Код, который я написал ниже, работает, только если размер таблицы ha sh равен 10.
По сути, я должен установить ограничение на время l oop, до которого зондирование может происходить максимально , Я проверил вручную и обнаружил, что для размера таблицы 10 каждые 6 позиций индекса повторяются. Поэтому я установил ограничение 6 на время l oop.
Когда речь идет о любом другом размере таблицы, повторяющиеся позиции индекса меняются по количеству. Поэтому я не могу решить, когда остановить итерацию. Я открыт для любого другого метода, чтобы решить эту проблему.
#include <stdio.h>
#include<stdlib.h>
#define TS 10
int ht[TS]={};
void insert()
{
int key,i=0,ind,s=0,hk;
// printf("\nenter a value to insert into htasht table\n");
scanf("%d",&key);
hk=key%TS;
while(s!=6)// limit=6 which is working only for table size 10
{
ind=(hk+i)%TS;
if(ht[ind] == 0 )
{
ht[ind]=key;
break;
}
s=s++;
i=(s*s)%TS;
}
if(s==6)
{
printf("value cant be inserted\n");
}
}
int search(int key)
{
int ind,i=0,hk,s=0;
hk=key%TS;
while(s!=6)
{
ind=(hk+i)%TS;
if(ht[ind]==key)
{
printf("value is found at ind %d\n ",ind);
return ind;
// break;
}s=s++;
i=(s*s)%TS;
}
if(s==6)
{
printf("value not found\n");
return 0;
}
// return 0;
}
void display()
{
int i;
printf("\nelements in thte htasht table are \n");
for(i=0;i< TS; i++)
printf("\n ind %d -- value = %d",i,ht[i]);
}
void del(int key)
{
int i,ind;
ind=search(key);
if(ind)
{
ht[ind]=0;
printf("deleted");
}
ind=0;
}
void main()
{
int opt,key,n;
/*printf("Enter step size of hash table\n");
scanf("%d",&s);
*/
while(1)
{
printf("\nPress 1. Insert\t 2. Display \t3. Search \t4.Delete\t 5.exit \n");
scanf("%d",&opt);
switch(opt)
{
case 1:printf("Enter how many values you want to enter\n");
scanf("%d",&n);
printf("enter values\n");
for(int j=0;j<n;j++)
{insert();}
// insert();
break;
case 2:
display();
break;
case 3:
printf("Enter search element\n");
scanf("%d",&key); search(key);
break;
case 4:
printf("Enter element to be deleted\n");
scanf("%d",&key);//search(key);
del(key);
break;
case 5:exit(0);
}
}
}