Реализация хеш-таблицы на C

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

typedef struct dictEntry {
    void *key;
    void *value;
    struct dictEntry *next;
} dictEntry;

typedef struct dict {
    dictEntry **table;
    unsigned long size;
    unsigned long used;
} dict;

void dictAdd(dict *d, void *key, void *value) {
    int index = hash(key) & d->size;
    dictEntry *entry;

    entry = malloc(sizeof(entry));

    entry->key   = key;
    entry->value = value;
    entry->next  = 0;

    if (d->table[index]) {
        /* this is does not work */
        dictEntry *next;
        next = d->table[index];

        while (next) {
            next = next->next;
        }

        next = entry;
    } else {
        d->table[index] = entry;
        d->used++;
    }
}

Моей мыслью было перебрать каждый элемент списка ( next->next) и присвоить указатель entryпоследнему элементу ( next = entry; ).
После нескольких дней переписывания и перемещения частей кода я все еще не могу найти решение.

0
задан Seki 21 May 2012 в 09:41
поделиться