我有以下的桶条目结构和哈希表设置
typedef struct Hash_Entry
{
struct Hash_Entry *next;
void *key_Data;
unsigned key_hash;
char key[5];
} Hash_Entry;
typedef struct Hash_Table
{
struct Hash_Entry **bucketPtr; /* Buckets in the table */
int size; /* Actual size of array. */
int numEntries; /* Number of entries in the table. */
int mask; /* Used to select bits for hashing. */
} Hash_Table;
我想创建一个这个Hash_Table的数组(或动态数组),这样当我觉得表已满时我可以创建另一个表而不是重新调整它
答案 0 :(得分:1)
你可以使用stdlib
中的malloc创建一个数组Hash_Table* array = (Hash_Table*)malloc(sizeof(Hash_Table) * 100);
当数组已满时,您可以执行realloc。
你可以看看:
答案 1 :(得分:1)
类似的东西:
void hash_table_init(Hash_Table *table, size_t entries)
{
size_t i;
table->size = 0;
table->numEntries = entries;
table->bucketPtr = malloc(table->numEntries * sizeof *table->bucketPtr);
for(i = 0; i < table->numEntries; i++)
table->bucketPtr[i] = NULL;
table->mask = 0; /* Not sure how to initialize this. */
}
我不太清楚将初始存储桶作为指针,我可能只是做
typedef struct {
...
Hash_Entry *buckets;
...
} Hash_Table;
假设实际上会使用大多数存储桶,那么为什么不使用它们呢? :)