gpt4 book ai didi

c - 我不明白 K&R 中的哈希表示例

转载 作者:行者123 更新时间:2023-12-01 02:02:31 25 4
gpt4 key购买 nike

这是 K&R 书中散列表示例中的安装函数:

struct nlist *install(char *name, char *defn)
{
struct nlist *np;
unsigned hashval;
if ((np = lookup(name)) == NULL) { /* not found */
np = (struct nlist *) malloc(sizeof(*np));
if (np == NULL || (np->name = strdup(name)) == NULL)
return NULL;
hashval = hash(name);
np->next = hashtab[hashval];
hashtab[hashval] = np;
} else /* already there */
free((void *) np->defn); /*free previous defn */
if ((np->defn = strdup(defn)) == NULL)
return NULL;
return np;
}

我不明白 line np->next = hashtab[hasvall]我认为使用变量 np->next 的原因是将两个具有相同散列值的字符串放入表中,但结果是每个散列值只有一个名称。

此外,我似乎无法理解函数查找,以及 for 中的“AFTERTHOUGHHT 部分(因为我认为 talbe 中的每个结构只有一个值:
/* lookup: look for s in hashtab */
struct nlist *lookup(char *s)
{
struct nlist *np;
for (np = hashtab[hash(s)]; np != NULL; np = np->next)
if (strcmp(s, np->name) == 0)
return np; /* found */
return NULL; /* not found */
}

我错过了什么?

最佳答案

每个值只能有一个键(名称),但两个或多个键可以具有相同的哈希值。 np->next = hashtab[hashval]添加新 hashval到链表。 Lookup 然后遍历列表直到匹配键(名称)。

关于c - 我不明白 K&R 中的哈希表示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34817578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com