Программирование двусвязных списков


Очень часто для хранения и обработки различных наборов данных удобно использовать 2-связные (двунаправленные) линейные списки, записи которых связаны посредством пары указателей, хранимых в адресных полях записей списка [5-6]. Логическую структуру 2-связного списка иллюстрирует диаграмма, представленная на рисунке 4.

 

 

Рисунок 4 – Диаграмма 2-связного списка

 

В каждой записи поле prev содержит адрес предыдущей записи, поле next – адрес последующей записи, а data обозначает информационные поля. Для доступа к списку могут быть использованы адреса начальной (start), конечной (end) и текущей (this) записей списка. Индикатором начальной и конечной записей являются нулевые (NULL) значения адресных полей Start и end, соответственно. Любая функциональная обработка списка строится на основе процедур модификации и просмотра. Процедуры модификации должны обеспечивать вставки и исключение записей списка. Частным случаем процедур вставки и исключения являются процедуры добавить и удалить начальную или конечную запись списка. На рисунке 5 представлена диаграмма, иллюстрирующая процедуру вставки новой записи Z после записи Y (или перед записью X).

 

Рисунок 5 – Процедура вставки в 2-связном списке

 

Следующая диаграмма иллюстрирует процедуру исключения текущей записи this (рисунок 6).

 

 

Рисунок 6 – Процедура исключения в 2-связном списке

 

Процедуры просмотра списка должны обеспечивать смещение указателя текущей записи (this) на требуемое число позиций в направлении начала или конца списка, как показано на следующей диаграмме (рисунок 7).

 

 

Рисунок 7 – Процедура просмотра списка

 

Частным случаем смещения указателя текущей записи является переход к соседней предыдущей или последующей записи (смещение на 1 позицию), а также нефиксированный переход к начальной или конечной записям списка, который позволяет принудительно инициализировать указатели start и end после модификаций в начале и конце списка.

Для организации объектно-ориентированной обработки данных, реализованных на основе списковых структур, целесообразно построить базовый класс записей 2-связного списка (class Dlink).

Базовый класс Dlink должен включать универсальные компоненты. Компоненты-данные класса Dlink должны обеспечивать двунаправленную защищенную (protected) связь записей списка посредством 2-х адресных полей, которые содержат адреса предыдущей и последующей записей списка, соответственно. Универсальную обработку записей списка должны обеспечивать общедоступные (public) компонентные методы. Компоненты базового класса Dlink могут наследоваться в различных производных классах с информационными полями данных и методами их обработки с обращением к базовым методам обработки списка.



Дата добавления: 2021-07-22; просмотров: 365;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.