Тема направлена на освоение методов работы со списочными структурами данных разных типов. Разработчик задачи должен создать данные соответствующего типа и описать все перечисленные методы работы с этими данными в каждом из вариантов задачи.
Структуры динамических данных типа списка, очереди, стека представляются объектами этих же типов. В каждом из типов объектов мы предлагаем определить все возможные методы работы с соответствующей структурой данных.
В этом разделе задачам на конструирование объектов с динамическим данными приходится приводить некоторые теоретические сведения и показывать примеры конструирования в связи с тем, что анализ имеющихся пособий оказывается не достаточен для решения подобных практических задач.
Допустим, у нас есть некоторая информация в виде строки. Описания объектов трех названных типов могут быть такими:
Type
stt=string[40];
Tpel=^Tel;
Tel=record
Fam: stt;
pnext:Tpel; {Указатель на следующий элемент списка}
ppred:Tpel;
end;
Tlist= object{Объект- список. Пример формирования методов объекта}
|
|
pStart:Tpel;
Constructor Init;
procedure InsertFirst(pNew:Tpel); {Вставить первый элемент в список,
в его начало}
procedure InsertLast(pNew:Tpel); {Вставить элемент в конец списка}
procedure DeleteEl(Deifam:stt); {Удалить один элемент}
procedure Save_to-file(fnamt:stt); {Сохранить список в файле}
procedure Load_from_file (fnamt:stt); {Прочитать данные для списка из файла}
procedure Show; {Показать содержимое списка на экране}
procedure DeleteList; {Удалить список из памяти}
destructor Done; {Освободить в динамической памяти все занятые объектом
ячейки }
end;
Несомненно количество и разнообразие методов зависит от решаемой конкретной задачи и использование объектов наследников позволит как ввести в объекты-наследники новые методы для работы со списками, так и изменить описанные.
Тип объекта - стек можно представить как наследника объекта Tlist:
Tstack=object(Tlist);
Constructor init; {Конструктор может быть иным, по сравнению
с конструктором списочного элемента}
procedure Push(f:stt); {Вставить на вершину стека очередной элемент.
Должен переместиться указатель стека.}
function Pop:Tpel; {Удалить элемент из стека именно с его вершины.]
Destructor done; {Уничтожение зарезервированной динамической памяти}
end;
Tqueue= object(Tlist); {Тип- очередь. Обязательны указатели начала и конца