如何在c中创建哈希表的动态数组

时间:2012-01-13 09:42:42

标签: c arrays hashtable dynamic-arrays

我有以下的桶条目结构和哈希表设置

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的数组(或动态数组),这样当我觉得表已满时我可以创建另一个表而不是重新调整它

2 个答案:

答案 0 :(得分:1)

你可以使用stdlib

中的malloc创建一个数组
Hash_Table* array = (Hash_Table*)malloc(sizeof(Hash_Table) * 100);

当数组已满时,您可以执行realloc。

你可以看看:

Create dynamic sized array of user defined structure

答案 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;

假设实际上会使用大多数存储桶,那么为什么不使用它们呢? :)