繁体   English   中英

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

[英]hash table with chaining method program not working as expected

我使用链表列表链接方法在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[]a[]所有元素初始化为NULL如下所示:

for(int i = 0;i < 100; i++){
   a[i] = NULL;
}

你的程序是无限循环的吗? 或许有这条线?

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

你指向*str指针永远不会在该循环的范围内无效,所以你应该得到一个无限循环。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM