Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Protected. fHead: pItem; // поле - указатель на начало списка






fHead: pItem; // поле - указатель на начало списка

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

Public

// свойство – указатель на начало списка (доступ по чтению)

property Head: pItem read fHead;

// свойство - число элементов списка (доступ по чтению)

property Size: Word read fSize;

// Включение элемента со значением v после элемента с адресом Addr

procedure InsertAfter(Addr: pItem; v: tValue);

// Включение элемента со значением v перед элементом с адресом Addr

procedure InsertBefore(Addr: pItem; v: tValue);

// Исключение из списка элемента после элемента с адресом Addr

function DeleteAfter(Addr: pItem): tValue;

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

// Поиск в списке элемента со значением v и возвращение его адреса

function Search(v: tValue): pItem;

// Включение элемента со значением v в начало списка

procedure InsertHead(v: tValue);

// Включение элемента со значением v в конец списка

procedure InsertRear(v: tValue);

function DeleteHead: tValue; // исключение элемента из начала списка

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

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

procedure Clear; // очистка списка

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

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

end; // class tList

4. Реализация основных операций над односвязным списком

Включение элемента со значением v после элемента с адресом Addr:

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

procedure tList.InsertAfter(Addr: pItem; v: tValue);

Var

NewItem: pItem; // вспомогательный указатель на новый элемент

Begin

NewItem: = New(pItem); // выделение памяти под новый элемент списка

NewItem^.Value: = v;

if Empty

then begin // если список пуст, включаем в его начало

NewItem^.Next: = nil;

fHead: = NewItem;

End

else begin // список не пуст - включаем после элемента с адресом Addr

NewItem^.Next: = Addr^.Next;

Addr^.Next: = NewItem;

end;

Inc(fSize); // увеличение числа элементов списка на 1

end; // procedure tList.InsertAfter

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

procedure tList.InsertBefore(Addr: pItem; v: tValue);

Var

NewItem: pItem; // вспомогательный указатель на новый элемент

Begin

NewItem: = New(pItem); // выделение памяти под новый элемент списка

if Empty

then begin // если список пуст, включаем в его начало

NewItem^.Value: = v;

NewItem^.Next: = nil;

fHead: = NewItem;

End

else begin // иначе обмен содержимым элементов NewItem^ и Addr^

NewItem^: = Addr^;

Addr^.Value: = v;

Addr^.Next: = NewItem;

end;

Inc(fSize); // увеличение числа элементов списка на 1

end; // procedure tList.InsertBefore

Исключение элемента, следующего за элементом с адресом Addr:

function tList.DeleteAfter(Addr: pItem): tValue;

Var

DisItem: pItem; // вспомогательный указатель на исключаемый элемент

Begin

if Addr^.Next= nil






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.