Табличные структуры
[Оглавление] [<< страница] [>>страница]


   6.5 Особенности алгоритмов удаления записей из таблицы
 

Удаление из таблиц с однозначным соответствием между адресом в таблице и ключом не вызывает никаких трудностей, просто строка Т[а] с удаляемым ключом к помечается как свободная (поле ключа очищается).

Для таблиц с внешними цепочками переполнения в динамической памяти удаление является процедурой, обратной вставке, и выполняется аналогично операции удаления из обычного линейного списка. Корректируются значения указателей, и освобождается динамическая память. Однако если первый элемент по адресу а = f(к) хранится в самой хеш-таблице, то процедура удаления усложняется.

Для таблиц с линейной открытой адресацией при с = 1 придется переместить содержимое всех строк, следующих за удаляемой строкой, на одну позицию. Для всех остальных видов таблиц при удалении записи нарушается связь между синонимами. Чтобы этого не произошло, вместо ключа в строке удаляемой записи можно вписать специальный код. Тогда каждая строка хеш-таблицы находится в одном из трех состояний: свободном, занятом или удаленном. Строка из свободного состояния может перейти в занятое состояние, но освободившаяся строка не сможет перейти обратно в свободное состояние, если строка является промежуточным элементом цепочки. Взаимные переходы из занятого состояния в удаленное и обратно допустимы.

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

[Оглавление] [<<страница] [>>страница] [В начало ]