リンクリストチェーン方式を使用してCでハッシュテーブルを実装しています。プログラムは実行されますが、エントリを検索している間"Element is not found"
、要素がハッシュにあるにもかかわらず、常に結果が得られます。この投稿は、私の前の投稿を少し編集したものです。プログラムは以下のとおりです。
struct llist{
char *s;
struct llist *next;
};
struct llist *a[100];
void hinsert(char *str){
int strint, hashinp;
strint = 0;
hashinp = 0;
while(*str){
strint = strint+(*str);
str=str+1;
}
hashinp = (strint%100);
if(a[hashinp] == NULL){
struct llist *node;
node = (struct llist *)malloc(sizeof(struct llist));
node->s = str;
node->next = NULL;
a[hashinp] = node;
}
else{
struct llist *node, *ptr;
node = (struct llist *)malloc(sizeof(struct llist));
node->s = str;
node->next = NULL;
ptr = a[hashinp];
while(ptr->next != NULL){
ptr = ptr->next;
}
ptr->next = node;
}
}
void hsearch(char *strsrch){
int strint1, hashinp1;
strint1 = 0;
hashinp1 = 0;
while(*strsrch){
strint1 = strint1+(*strsrch);
strsrch = strsrch+1;
}
hashinp1 = (strint1%100);
struct llist *ptr1;
ptr1 = a[hashinp1];
while(ptr1 != NULL){
if(ptr1->s == strsrch){
cout << "Element Found\n";
break;
}else{
ptr1 = ptr1->next;
}
}
if(ptr1 == NULL){
cout << "Element Not Found\n";
}
}
hinsert()
ハッシュに要素を挿入することhsearch
であり、ハッシュ内の要素を検索することです。ハッシュ関数はhinsert()
それ自体の中に書かれています。でmain()
、私がすべての要素を次のように初期化していa[]
ますNULL
。
for(int i = 0;i < 100; i++){
a[i] = NULL;
}