Как изменить функцию деления ha sh в зависимости от размера корзины - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю над школьным проектом, в котором я должен осуществить перефразировку. Я не знаю, какой метод лучше всего подойдет для этого случая, но я думал о хешировании действительного числа следующим образом:

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
...