私はreg noに基づいてハッシュテーブルを作成しています。挿入機能は正常に動作していますが、衝突の場合は検索と削除が機能しません。それは全く何もしていない。コンパイルエラーもありません。どんな助けもありがとう。リニアプロービングが衝突のために機能しない
int size=4;
struct students
{
char name[50];
int regno;
int age;
char city[50];
}stud[4];
void insertion()
{
int reg,k,i;
printf("\nenter the student details you want to insert:\n");
printf("\nenter regno: ");
scanf("%d",®);
k=reg%size;
if (stud[k].regno==0)
{
stud[k].regno=reg;
printf("\nenter name: ");
scanf("%s",&stud[k].name);
printf("\nenter age: ");
scanf("%d",&stud[k].age);
printf("\nenter city: ");
scanf("%s",&stud[k].city);
}
else
{
for(i=k+1;i<size;i++)
{
if (stud[i].regno==0)
{
stud[i].regno=reg;
printf("\nenter name: ");
scanf("%s",&stud[i].name);
printf("\nenter age: ");
scanf("%d",&stud[i].age);
printf("\nenter city: ");
scanf("%s",&stud[i].city);
break;
}
else
for(i=0;i<k;i++)
{
if (stud[i].regno==0)
{
stud[i].regno=reg;
printf("\nenter name: ");
scanf("%s",&stud[i].name);
printf("\nenter age: ");
scanf("%d",&stud[i].age);
printf("\nenter city: ");
scanf("%s",&stud[i].city);
break;
}
}
}
}
}
void deletion()
{
int reg, k;
int f=0;
printf("\nenter the student reg no you want to delete");
scanf("%d",®);
k=reg%size;
if(stud[k].regno==0)
{
printf("\nIt is empty");
}
else if(stud[k].regno==reg)
{
printf("The removed student is %d",stud[k].regno);
stud[k].regno=0;
stud[k].name[0]='\0';
stud[k].age=0;
stud[k].city[0]='\0';
printf("\n\n");
}
else
{
int i;
for (i=k+1;i<size;i++)
{
if(stud[k].regno==reg)
{
printf("The removed student is %d",stud[k].regno);
stud[k].regno=0;
stud[k].name[0]='\0';
stud[k].age=0;
stud[k].city[0]='\0';
printf("\n\n");
f=1;
break;
}
}
for(i=0;i<k;i++)
{
if (stud[i].regno==reg)
{
printf("The removed student is %d",stud[k].regno);
stud[k].regno=0;
stud[k].name[0]='\0';
stud[k].age=0;
stud[k].city[0]='\0';
printf("\n\n");
f=1;
break;
}
}
}
if (f==1)
{
printf("\nIt is not present");
}
}
void search()
{
int reg, k;
int f=0;
printf("\nenter the student reg no you want to search");
scanf("%d",®);
k=reg%size;
if(stud[k].regno==0)
{
printf("\nIt is empty");
}
else if(stud[k].regno==reg)
{
printf("The student found is: \n");
printf("\nreg no: %d",stud[k].regno);
printf("\nname: %s",stud[k].name);
printf("\nage: %d",stud[k].age);
printf("\ncity: %s",stud[k].city);
printf("\n\n");
}
else
{
int i;
for (i=k+1;i<size;i++)
{
if(stud[k].regno==reg)
{
printf("The student found is: \n");
printf("\nreg no: %d",stud[k].regno);
printf("\nname: %s",stud[k].name);
printf("\nage: %d",stud[k].age);
printf("\ncity: %s",stud[k].city);
printf("\n\n");
f=1;
break;
}
}
for(i=0;i<k;i++)
{
if (stud[i].regno==reg)
{
printf("The student found is: \n");
printf("\nreg no: %d",stud[k].regno);
printf("\nname: %s",stud[k].name);
printf("\nage: %d",stud[k].age);
printf("\ncity: %s",stud[k].city);
printf("\n\n");
f=1;
break;
}
}
if (f==1)
{
printf("\nIt is not present");
}
}
}
void display()
{
int i;
for(i=0;i<size;i++)
{
printf("\nreg no: %d",stud[i].regno);
printf("\nname: %s",stud[i].name);
printf("\nage: %d",stud[i].age);
printf("\ncity: %s",stud[i].city);
printf("\n\n");
}
}
void main()
{
int i,c;
for(i=0;i<size;i++)
{
stud[i].regno=0;
stud[i].name[0]='\0';
stud[i].age=0;
stud[i].city[0]='\0';
}
do {
printf (" Enter 1 for insert \n");
printf (" Enter 2 for deletion \n");
printf (" Enter 3 for search \n");
printf (" Enter 4 for display \n");
scanf ("%d", &c);
switch(c)
{
case 1: insertion();
break;
case 2: deletion();
break;
case 3: search();
break;
case 4: display();
}
} while(c>0 && c<=4);
}
私はあなたのforループを '挿入 'と呼ばれるその怪物に入れようとしたのか疑いがありますが、それはまさにあなたがやったことです。デュライターでの行編集の時代は長らく残っています。インデントし、適切にブレースしてください。 – WhozCraig