Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Алгоритмы и структуры данных

ЦИКЛИЧЕСКИЙ ДВУСВЯЗНЫЙ список

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

Реализация циклического двусвязного списка

Рис. 2.9. Реализация циклического двусвязного списка

Над циклическим двусвязным списком могут быть выполнены все операции, определенные для циклического односвязного списка. Класс tDCCircleList может быть описан следующим образом:

type

tDCCircleList=class // класс - циклический двусвязный список

protected

fHead: pltem; //поле - указатель на начало списка fSize: Word; //поле - число элементов списка

public

// Свойство - число эл-тов списка (доступ по чтению и записи) property Size: Word read fSize write fSize;

// Свойство - указ, на начало списка (доступ по чтению и записи) property Head: Word read fHead write fHead;

//Включение эл-та со значением v справа от эл-та с адресом Add г procedure lnsertRight(Addr: pltem; v: tValue);

//Включение эл-та со значением v слева от эл-та с адресом Addr procedure lnsertLeft(Addr: pltem; v: tValue);

// Исключение элемента справа от элемента с адресом Addr function DeleteRight(Addr: pltem): tValue;

//Исключение из списка элемента с адресом Addr function Delete(Addr: pltem): tValue;

// Включение элемента со значением v в начало списка procedure lnsertHead(v: tValue);

// Включение элемента со значением v в конец списка procedure lnsertRear(v: tValue);

// Исключение элемента из начала списка // и возвращение его значения function DeleteHead: tValue;

// Исключение элемента из конца списка // и возвращение его значения

function DeleteRear: tValue; //исключение из конца

// Возвращение адреса элемента со значением v function Search(v: tValue): pltem;

function Empty: Boolean; //возвращение True, если список пуст procedure Clear; //очистка списка

//Присоединение списка DCList2 справа

procedure Concat(var DCList2: tDCCircleList);

constructor Create; //конструктор - создание списка

destructor Destroy; override; //деструктор - удаление списка

end; //tDCCircleList

Класс tDCCircleList не является в данном описании наследником класса tDCList по следующим причинам: поле Rear класса tDCList не используется; вводится новая процедура Concat; все методы класса tDCCircleList реализуются иначе, чем одноименные методы класса tDCList.

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 

Популярные страницы