gpt4 book ai didi

c - 验证某个键是否在哈希表中

转载 作者:行者123 更新时间:2023-11-30 17:34:08 25 4
gpt4 key购买 nike

因此,我需要创建一个函数,给定某个哈希表和一个键,验证是否存在具有相同键的对象。到目前为止,我所拥有的是:

int hash_exists(hash_table td, const char *key)
{
element *temp = NULL;
int i = 0;

if (td == NULL)
return INVALID_HASHTABLE;

i = td->hfunc(key, td->size);

for (i=0; i<td->size;i++)
{
temp = td->elements[i];

while (temp!=NULL)
{
if (strcmp(temp->obj->key, key)!)
return INEXISTENT_HASHTABLE;

else
temp = temp->next;
}
}
return EXISTING_HASHTABLE;
}

但是,运行测试程序时,它表示当哈希表中不存在该值时,它必须返回 INEXISTENTE_HASHTABLE

顺便说一句,hfunc(key, td->size) 返回与字符串/键关联的哈希值。这个问题非常具体,所以忽略它。并且,

typedef struct
{
char key[KEY_SIZE];
char value[SIZE_VALUE];
} objet;


typedef struct elem
{
objet* obj;
struct elem * next;
} element;


struct hash_table
{
hash_func *hfunc;
element **elements;
int size;
}

typedef struct hash_table *hash_table;

我真的很想知道我做错了什么,如果有人可以纠正我的代码,我将不胜感激。我确实在论坛上搜索了一些对我有帮助的东西,但没有找到任何东西。谢谢。

最佳答案

您已反转返回值。另外 if 条件需要稍作修改:

int hash_exists(hash_table td, const char *key)
{
element *temp = NULL;
int i = 0;

if (td == NULL)
return INVALID_HASHTABLE;

i = td->hfunc(key, td->size);

for (i=0; i<td->size;i++)
{
temp = td->elements[i];

while (temp!=NULL)
{
if (!strcmp(temp->obj->key, key)) {
return EXISTING_HASHTABLE; // Key found
}
temp = temp->next;
}
// Key not found
return INEXISTENT_HASHTABLE;
}
}

关于c - 验证某个键是否在哈希表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493359/

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