2012-01-13 131 views
1

我有以下桶条目结构和哈希表建立如何创建哈希表的在C动态数组

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的阵列(或动态阵列)所以,当我觉得表满,我可以创建另一个表,而不是重新调整其大小

回答

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; 

假设大多数水桶实际上是我们编辑,所以为什么不拥有它们。 :)