Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
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
|