带有链接方法程序的哈希表无法按预期工作

时间:2012-10-31 16:54:47

标签: c data-structures hash hashmap hashtable

我使用链表链接方法在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;
}

2 个答案:

答案 0 :(得分:3)

你的程序是否处于无限循环中?或许有这条线?

while(*str){
        strint = strint+(*str);
}

指向*str的指针永远不会在该循环的范围内无效,因此您应该获得无限循环。

答案 1 :(得分:3)

你没有在这个循环中推进指针。 (这也是一个非常糟糕的哈希函数)

while(*str){
        strint = strint+(*str);
}