TClassicList реализует классический список, со связкой узлов друг с другом с помощью указатетелей.
TArrayList реализует список c храниением узлов в динамическом массиве.
IList=interface
// добавляет узел в начало списка
function addFirst(node:tobject):tobject;
// добавляет узел в конец списка
function addLast(node:tobject):tobject;
// удаляет узел из начала списка
function deleteFirst:tobject;
// удаляет узел после переданного узла
function deleteAfter(prevNode:tobject):tobject;
// вставляет узел после переданного узла
function insertAfter(prevNode:tobject; insnode:tobject):tobject;
// Возращает 0 при равенстве содержимого узлов
// Возращает 1, если содержимое node1 больше содержимого node2
// Возращает -1, если содержимое node1 меньше содержимого node2
function compare(node1,node2:tobject):integer;
// Перемещает внутренний указатель в начало списка, возращает первый узел списка
// Если список пуст, возращает nil
function first:tobject;
// Перемещает внутренний указатель на следующий узел, возвращает данный узел
// Если внутренний указатель вышел за пределы списка, возращает nil
function next:tobject;
// Перемещает внутренний указатель на конец списка, возвращает последний узел списка
// Если список пуст, возращает nil
function last:tobject;
// Визуализирует узел
procedure showNode(node:tobject);
// Создает и возвращает копию узла
function copyNode(node:tobject):tobject;
// Уничтожает содержимое списка
procedure destroyList;
end;
Оба класса манипулируют узлами, порожденными от TObject, содержащими
одно значение встроенного типа данных (integer, real или string).
Узлы должны поддерживать отношения трихотомии и транзитивности (т.е. быть сортируемыми).
Допустимо разработать и использовать различные классы узлов.
Рекомендуется использовать узлы с подержкой разных встроенных типов. +5 баллов при использовании
двух классов узлов со значениями различных встроенных типов. +10 баллов при использовании
трех классов узлов со значениями различных встроенных типов.
Студент самостоятельно формирует классы TClassicList, TArrayList и класс(ы) узлов.
Разработать и проверить работоспособность следующих процедур:
procedure ListMerge(LResult:IList; L:IList);
Список L по окончании работы процедуры остается неизменным.
procedure ListChessMerge(LResult:IList; L:IList);
Список L по окончании работы процедуры остается неизменным.
procedure ListSort(LResult:IList; L:IList; ASC:boolean);
По окончании сортировки список L должен быть пустым.