Как инициализировать хэш-карту в c? - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно инициализировать хэш-карту в C. Я создал структуры для hashnode и hashmap, которые будут показаны ниже, но мне нужно отправить его в функцию

void hashmap_init(hashmap_t *hm, int table_size); 

, и мне нужно инициализироватьхэш-карта 'hm' имеет заданный размер и item_count 0. Необходимо убедиться, что поле 'table' инициализировано в массив размера 'table_size' и заполнено значениями NULL.

typedef struct hashnode {  
char key[128];                
char val[128];                
struct hashnode *next;        
} hashnode_t;


typedef struct {  
int item_count;               
int table_size;               
hashnode_t **table;            
} hashmap_t;

#define HASHMAP_DEFAULT_TABLE_SIZE 5

1 Ответ

0 голосов
/ 24 сентября 2019

Используйте malloc() для выделения массива table_size сегментов.

void hashmap_init(hashmap_t *hm, int table_size) {
    hm->item_count = 0;
    hm->table_size = table_size;
    hm->table = malloc(table_size * sizeof *(hm->table));
    for (int i = 0; i < table_size; i++) {
        hm->table[i] = NULL;
    }
}

Если вам нужно удалить карту хеша, вы перевернете распределения:

for (int i = 0; i < hm->table_size; i++) {
    free(hm->table[i]);
}
free(hm->table);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...