Учитывая следующий фрагмент кода:Поиск полный хэш-таблицу
#include<stdio.h>
#include<conio.h>
#define TABLESIZE 100
sturct record{
int k;
int r;
}table[TABLESIZE];
int tcount=0;
int search_and_insert(int key,int rec){
int i;
i=h(key);
while(table[i].k!=key && table[i].k!=NULL)
i=rh(i);
if(table[i].key==NULL){
table[i].k=key;
table[i].r=rec;
tcount++;
}
return i;
}
int h(int key){
return key%1000;
}
int rh(int hkey){
int k;
if(hkey==99)
return 0;
return ((hkey+1)%1000);
}
while
петля может быть бесконечный цикл, если таблица уже заполнена, чтобы решить эту проблему, я могу ввести if
подобное заявление:
if(tcount<TABLESIZE){
while(table[i].k!=key && table[i].k!=NULL)
i=rh(i);/*Rehash*/
if(table[i].key==NULL){
table[i].k=key;
table[i].r=rec;
tcount++;
}
}
Но по мне это порождает другую проблему, то я не буду иметь возможность искать записи, которая уже существует в таблице, когда таблица заполнена или поиск даст неправильный результат ,
Можно ли решить эту проблему?
«int» никогда не может быть «NULL». Вам нужен отдельный флаг для каждого ведра, чтобы указать, используется ли он. –