Я имею дело с реализацией хеш-таблицы. Насколько я понимаю, хеш-таблица состоит в том, чтобы иметь массив, подобный таблице, в которой вы можете быстро получить доступ к элементам, получив значение хеш-функции и изменив его по размеру таблицы. Итак, моя первоначальная мысль объявляла
Node *hTable [100];
где
typedef struct node {
char *s;
int value;
} Node;
и переход к индексу массива и malloc нового элемента, который там находится. Но проблема в том, что мне нужно вырастить свой стол.
Итак, мой вопрос: как мне создать динамическую таблицу, но обращаться к ней как к массиву? (например, table[i]
).
Я знаю, что вам нужно назвать что-то вроде
Node *table = (Node*)malloc(sizeof(Node)*size);
, который позволяет вам обращаться к ней как к таблице table[i] =...
, но если я это сделаю, я не могу объявить новый узел в индексе таблицы
table[i]=(Node*)malloc(sizeof(Node));
Вот код, который я тестировал (получая ошибку seg), чтобы лучше понять проблему:
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct node {
5 int data;
6 struct node *next;
7 } Node;
8
9
10 void main() {
11 Node **list;
12 *list = (Node*)malloc(sizeof(Node)*10);
13 for (int i = 0; i < 10; i++) {
14 list[i] = (Node*)malloc(sizeof(Node)); //problem here?
15 list[i]->data = i;
16 list[i]->next = NULL;
17 }
18 printf("printing...\n");
19 for (int i = 0; i < 10; i++) {
20 printf("%d ", list[i]->data);
21 }
22 }