所以,我需要创建一个给定某个哈希表和一个键的函数,验证是否有一个具有相同键的对象。到目前为止,我所拥有的是:
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
。
BTW,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;
我真的很想知道我做错了什么,如果有人能纠正我的代码,我会很感激。我确实在论坛上寻找可以帮助我的东西,但没有找到任何东西。感谢。
答案 0 :(得分:0)
您已撤消了返回值。 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;
}
}
答案 1 :(得分:0)
试试这个:
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;
else
temp = temp->next;
}
}
return INEXISTENT_HASHTABLE;
}
答案 2 :(得分:0)
int hash_exists(hash_table td, const char *key)
{
element *temp = NULL;
int i; // should be unsigned
if (td == NULL)
return INVALID_HASHTABLE;
i = td->hfunc(key, td->size);
for (temp = td->elements[i]; temp; temp = temp->next) {
if ( !strcmp(temp->obj->key, key)) return EXISTING_HASHTABLE;
}
return INEXISTENT_HASHTABLE;
}