【发布时间】:2018-12-26 16:00:19
【问题描述】:
我有一个问题我已经尝试解决好几天了。我尝试从三个结构创建一个哈希表,第一个结构带有指向具有键和值对的对数组的指针桶。密钥应该是一个字符串(char * arr)。我不完全掌握如何为其创建一个有效的插入函数我的目标是在我的代码中尝试查看存储桶 h 中是否存在密钥。我觉得我的逻辑和语法有问题。如果有人可以帮助我,将不胜感激。
我在 Wikipedia 和 youtube 视频上查看了哈希表理论,但没有一个使用三个结构和字符串键。这就是我感觉卡住的地方。
#include<stdio.h>
#include"hashtable.h"
struct hash_table
{
Bucket *bucket;
int hash_size;
};
struct bucket
{
Pair *list;
int capacity;
int size;
};
struct pair
{
char *key;
int value;
};
Pair copy_key(char *key, int value)
{
Pair copy = malloc(sizeof(Pair));
copy->key = key;
copy->value = value;
return copy;
}
unsigned long hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
void hash_insert (HashTable *tab, const char *key, int value)
{
unsigned long h = hash(key) % tab->hash_size;
int i = 0;
while(tab->bucket[h]->list[i]->key != NULL && (i < tab->bucket->size))
{
Pair pair = copy_key(key,value);
if (tab->bucket[h]->list[i]->key == pair->key)
{
tab->bucket[h]->list[i]->value == pair->value;
return;
}
}
}
具有字符串键的三层结构层哈希表的有效插入函数。
【问题讨论】:
-
请查看minimal reproducible example。您的代码至少不完整。最重要的部分缺乏:你如何初始化你的哈希表! (对/桶的声明:嗯,可以想象......)。适当的格式将使代码更具可读性。
-
对我来说你的问题还不清楚。如果您向我们展示如何初始化哈希表以及如何调用插入函数,也许会有所帮助。您当前的代码似乎根本没有插入任何内容