У меня есть несколько наборов данных, которые имеют шаблон значения ключа - то есть строковый ключ и указатель на данные. Прямо сейчас он хранится в хеш-таблицах, каждая таблица имеет массив слотов, соответствующих ключам хеш-функции, и при столкновении формирует связанный список под каждым слотом, в котором есть коллизия (прямое сцепление). Все реализовано в C (и должно оставаться в C), если это имеет значение.
Теперь данные на самом деле представляют собой 3 несколько разных типа наборов данных:
- Некоторые наборы могут быть изменены (ключи добавлены, удалены, заменены и т. Д.) По желанию
- Для некоторых наборов данные могут быть добавлены, но почти никогда не заменены / удалены (то есть это может случиться, но на практике это очень редко)
- Для некоторых наборов данные добавляются один раз, а затем только просматриваются, они никогда не изменяются после загрузки всего набора.
Конечно, все наборы должны поддерживать поиск как можно быстрее и потреблять минимальное количество памяти (хотя скорость поиска важнее размера).
Итак, вопрос в том, есть ли какая-то лучшая структура / реализация хеш-таблицы, которая бы лучше подходила для конкретных случаев? Я подозреваю, что в первом случае цепочка является лучшей, но не уверена в двух других случаях.