【问题标题】:Search won't work on hash table搜索不适用于哈希表
【发布时间】:2014-11-21 10:10:04
【问题描述】:

我无法弄清楚为什么我的搜索代码在哈希表中不起作用。我已经尝试在每一行插入 printf 只是为了查看代码流,这是正确的,但我似乎仍然无法获得正确的输出。该程序按字母顺序将单词保存在哈希表上,并使用链表。因此,如果我搜索以“A”开头的单词,它必须返回 Key:1 等等。我会很感激你能提供的任何帮助:)

void searchInHash(int key, char *name) {
    int hashIndex = key, flag = 0;
    struct node *myNode;
    myNode = hashTable[hashIndex].head;
    if (!myNode) {
        printf("Search element unavailable in hash table\n");
        return;
    }
    while (myNode != NULL) {
        if (myNode == name) {
            printf("Key: %d\n", hashIndex);
            flag = 1;
            break;
        }
        myNode = myNode->next;
    }
    if (!flag)
       printf("Search element unavailable in hash table\n");
    return;
}

【问题讨论】:

  • f (myNode == name) {myNode 的类型是 struct node*name 的类型是 char *

标签: c data-structures hashtable


【解决方案1】:

name 是一个char* 指针。 myNode 是一个struct node* 指针。

它们不能相等,也就是说,具有相同的内存地址。

myNode == name 将始终为假。

如果你想比较指针所指向的内容,你可以使用string.h函数strcmp()来代替。见:http://www.cplusplus.com/reference/cstring/strcmp/

但要确保两个指针都指向一个实际的字符串(以空结尾)。 name 可以,但myNode 可能不行。

【讨论】:

  • @gaily :习惯是在您认为答案回答了您的问题时验证答案(左侧复选框)。
猜你喜欢
  • 2014-04-07
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 2013-04-27
相关资源
最近更新 更多