Лабораторная 2. Библиотека классов для обработки списков

Разработать библиотеку классов для обработки списков на основе решения л.р.1 предмета "Алгоритмы и структуры данных". Проверить работоспособность классов библиотеки.

Состав библиотеки:

  1. Абстрактный класс-модель TANode для хранения содержимого узла списка.
  2. Класс T1Node(TANode) для хранения узла односвязного и односвязного-кольцевого списка.
  3. Класс T2Node(T1Node) для хранения узла двусвязного и двусвязного-кольцевого списка.
  4. Вспомогательные типы данных:
        TListAction=procedure(Node:TANode) of object;
    
  5. Абстрактный класс-модель TAList для управления списком.
     Поля:
        fHead:TANode;
     Методы: (студент должен корректно квалифицировать методы с помощью ключевых слов abstract, virtual, class, override и др.)
        // конструкторы
        Constructor Create;
        Constructor Create(filename:string);
        Constructor Create(Source:TAlist);
        function CreateElement(pdata:pointer):TANode;
        // деструкторы
        Destructor Destroy;
        // модификаторы
        function AddFirstElement(Node:TANode):TANode;
        function AddLastElement(Node:TANode):TANode;
        function InsertElementAfter(prevNode:TANode; Node:TANode):TANode;
        function InsertElementBefore(nextNode:TANode; Node:TANode):TANode;
        function DeleteFirstElement():TANode;
        function DeleteLastElement():TANode;
        function DeleteElement(Node:TANode):TANode;
        function DeleteElementAfter(prevNode:TANode):TANode;
        function DeleteElementBefore(nextNode:TANode):TANode;
        // селекторы
        function GetHead():TANode;
        function GetNextElement(prevNode:TANode):TANode;
        function GetPrevElement(nextNode:TANode):TANode;
        // итераторы
        Procedure Store(filename:string);
        procedure ListAction(action:TListAction); 
        procedure ListActionReverse(action:TListAction);
        procedure Show;
        procedure ShowReverse;
        function First:TANode; // сброс итератора, получение первого элемента
        function Next:TANode; // инкремент итератора, получение следующего элемента
        procedure DisposeList(DisposeAction:TListAction=nil);
    
  6. Класс T1List(TAList) для управления односвязным списком.
  7. Класс T1CList(T1List) для управления односвязным кольцевым списком.
  8. Класс T2List(TAList) для управления двусвязным списком.
  9. Класс T2CList(T2List) для управления двусвязным кольцевым списком.