4.5 Коды для хеш-таблиц
typedef int T; /* type of item to be sorted */
#define compEQ(a,b) (a == b)
typedef struct Node_ {
struct Node_ *next; /* next node */
T data; /* data stored in node */
} Node;
typedef int hashTableIndex;
Node **hashTable;
int hashTableSize;
hashTableIndex hash(T data) {
/***********************************
* hash function applied to data *
***********************************/
return (data % hashTableSize);
}
Node *insertNode(T data) {
Node *p, *p0;
hashTableIndex bucket;
/************************************************
* allocate node for data and insert in table *
************************************************/
/* insert node at beginning of list */
bucket = hash(data);
if ((p = malloc(sizeof(Node))) == 0) {
fprintf (stderr, "out of memory (insertNode)\n");
exit(1);
}
p0 = hashTable[bucket];
hashTable[bucket] = p;
p->next = p0;
p->data = data;
return p;
}
void deleteNode(T data) {
Node *p0, *p;
hashTableIndex bucket;
/********************************************
* delete node containing data from table *
********************************************/
/* find node */
p0 = 0;
bucket = hash(data);
p = hashTable[bucket];
while (p && !compEQ(p->data, data)) {
p0 = p;
p = p->next;
}
if (!p) return;
/* p designates node to delete, remove it from list */
if (p0)
/* not first node, p0 points to previous node */
p0->next = p->next;
else
/* first node on chain */
hashTable[bucket] = p->next;
free (p);
}
Node *findNode (T data) {
Node *p;
/*******************************
* find node containing data *
*******************************/
p = hashTable[hash(data)];
while (p && !compEQ(p->data, data))
p = p->next;
return p;
}
Еще по теме 4.5 Коды для хеш-таблиц:
- 3.1 Хеш-таблицы
- Таблица 8 – Таблица для SWOT-анализа
- 4.1 Коды для сортировки вставками
- 4.2 Коды для сортировки Шелла
- 4.6 Коды для бинарных деревьев
- 4.8 Коды для разделенных списков
- 4.7 Коды для красно-черных деревьев
- 4.3 Коды для быстрого поиска (функции Quicksort)
- 4.4 Коды для стандартной реализации быстрого поиска
- 8. Пользуйтесь таблицами и списками для выделения пунктов в статье.
- Додаток 1 Таблиця для розрахунку основного обміну чоловіків
- Додаток 2 Таблиця для розрахунку основного обміну жінок
- Приложение К Таблицы для преобразования координат в смежную зону
- 3.4. Множественные сравнения в таблицах для неальтернативных вопросов. Программа Typology Tables
- Исследование цветового зрения по полихроматическим таблицам Е. Б. Рабкина и пороговым таблицам Е. Н. Юстовой
- 1.5.3 Построение доверительного интервала для дисперсии. Таблицы распределения хи-квадрат.
- Таблицы и графики дисконтирования Натуральные логарифмы Статистические таблицы Формулы производны
- Приложение Д Таблица для перевода делений угломера в градусы и минуты