Я работаю над школьным проектом, в котором я должен осуществить перефразировку. Я не знаю, какой метод лучше всего подойдет для этого случая, но я думал о хешировании действительного числа следующим образом:
int hash (struct Table *temp, int key)
{
int test = 3; // here would be the buckets size +1 but the function below cannot return it
return key % test;
}
Функция инициализации:
void init (struct Table *temp, int buckets)
{
if (buckets == 0) // make sure I allocate something
buckets = 2;
temp->entries = 0;
temp->size = 1;
while (temp->size < buckets) // ensure buckets is a power of 2
temp->size *= 2;
printf("post temp->size: %d\n", temp->size);
temp->buckets=(struct Node **) calloc(temp->size, sizeof(struct Node *));
}
This Вот как я вставляю в таблицу и перестраиваю таблицу, если необходимо: функция инициализации, в противном случае программа завершается с ошибкой, НЕИСПРАВНОСТЬ СЕГМЕНТАЦИИ. Я должен как-то изменить его, чтобы он мог динамически работать в зависимости от размера сегментов. Для этого ввода:
int arr[] = {0, 7, 14, 21, 28, 35, 42, 49, 56, 63, 1, 8, 15, 22, 29, 36, 43, 50, 57, 64, 71, 78, 85};
init(temp, 0);
for (int i = 0; i < sizeof(arr)/4; i++)
insert(temp, arr[i]);
showTable(temp);
Я получаю этот вывод:
post temp->size: 2
post temp->size: 4
post temp->size: 8
post temp->size: 16
post temp->size: 32
post temp->size: 64
Numbers in the 0. bucket: // the number mod 3 == 0
78 57 42 0 21 63 15 36
Numbers in the 1. bucket:
85 64 43 49 28 7 1 22
Numbers in the 2. bucket:
71 50 35 14 56 8 29