我使用链表链接方法在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;
}
答案 0 :(得分:3)
你的程序是否处于无限循环中?或许有这条线?
while(*str){
strint = strint+(*str);
}
指向*str
的指针永远不会在该循环的范围内无效,因此您应该获得无限循环。
答案 1 :(得分:3)
你没有在这个循环中推进指针。 (这也是一个非常糟糕的哈希函数)
while(*str){
strint = strint+(*str);
}