Индексно-последовательный способ
Линейный список упорядочивается по первичному ключу. Аналогично блочному методу доступа, он делится на виртуальные блоки размером √N. Затем ключевые поля последних элементов блоков вместе с порядковыми номерами этих элементов в списке включаются в дополнительные списки, которые называются индексами. Таким образом, для списка из таблицы 5 (далее – основного списка):
Таблица 5
№ п/п | Фамилия | Имя | Отчество | Номер зачетной книжки | Домашний адрес |
Скворцов | Олег | Иванович | пр. Мира, 45 - 3 | ||
Соколов | Юрий | Кузьмич | ул. Леонова, 23 - 98 | ||
Строков | Иван | Иванович | ул. Красная, 9 - 2 | ||
Супруненко | Виктор | Егорович | Каштановая аллея, 23 - 5 |
будет построен индекс, представленный в таблице 6:
Таблица 6
№ п/п | Фамилия | № п/п в основном списке |
Соколов | ||
Супруненко |
Поле № п/п в основном спискеявляется полем со ссылками на некоторые элементы другого списка. В дальнейшем подобные поля будем называть Ссылкой. С их помощью поддерживается связь элементов одних таблиц с элементами других таблиц, а также связь между элементами одной и той же таблицы, которая образует цепочки (цепи) элементов.
При поискепо ключу Кдоступ вначале по индексу определяется блок, в котором может находиться искомый элемент. Затем выполняется обращение к этому блоку в основном списке и, как правило, методом последовательного сканирования, просматриваются элементы блока. Принципиальное отличие этого метода от блочного состоит в том, что при небольшом размере индекса он может быть размещен целиком в основной памяти компьютера на время выявления требуемого блока. Поскольку размер основного списка в общем случае достаточно велик, такая оперативная его обработка либо невозможна, либо затруднительна. Следует отметить, что индекс является в свою очередь линейным списком, по которому может быть организован любой способ доступа из рассмотренных ранее.
Пример 7.Пусть в основном списке таблицы 5 надо просмотреть адрес студента по фамилии Скворцов, т.е. qпросмотр = (Фамилия= Скворцов, Домашний адрес), где Кдоступ = Скворцов. Задача решается следующим образом:
1. выбирается первый элемент в индексе;
2. его ключевое поле сравнивается с искомым: Соколов = Скворцов;
3. поскольку условие не выполняется, проверяется, возможно ли нахождение искомого элемента в текущем, первом, блоке. Для этого проверяется условие: Соколов > Скворцов;
4. условие выполняется, поэтому из соседнего поля индекса выбирается ссылка на последний элемент первого блока в основном списке – это 2;
5. по этому номеру выполняется обращение к предыдущему, т.е. первому, элементу основного списка;
6. ключевое поле этого элемента сравнивается с искомым ключом: Скворцов = Скворцов;
7. поскольку ключевые поля равны, выводится адрес: пр. Мира, 45 – 3; алгоритм заканчивает работу.
Добавлениенового элемента выполняется способом, аналогичным рассмотренным ранее, за исключением того, что модифицируется также и индекс. А поскольку индекс есть также упорядоченный по ключу линейный список, то и к его пополнению пригодны способы пополнения линейных списков.
Дата добавления: 2015-03-03; просмотров: 562;