Используя лекционный материал, разработать модуль управления односвязными списками, основанный на структурах TList и TNode:
type PNode=^TNode; TNode=record data:integer; pnext:PNode; end; PList=^TList; TList=record PHead:PNode; PLast:PNode; Count:integer; end;Реализовать следующие функции, проверить их работоспособность:
function createList():PList; // создание списка function createNode(key:integer):PNode; // создание узла procedure clearList(PL:PList); // уничтожение содержимого списка function disposeList(var PL:PList); // полное уничтожение списка procedure showList(PL:PList); // показ списка procedure showListRev(PL:PList); // показ списка в обратном порядке
function addFirstNode(PL:PList; P:PNode):PNode; // добавление в начало списка function addLastNode(PL:PList; P:PNode):PNode; // добавление в конец списка function insertNode(PL:PList; PPrev:PNode; P:PNode):PNode; // вставка в список function deleteNode(PL:PList; key:integer):PNode; // удаление узла в списке с предварительным поиском function deleteNode(PL:PList; P:PNode):PNode; // удаление переданного узла в списке function deleteNodeAfter(PL:PList; PPrev:PNode):PNode; // удаление узла в списке после переданного узла
function findNode(PL:PList; key:integer):PNode; // поиск узла в списке // Добавляет к списку PLTo вырезку из списка PLFrom, начиная с элемента с номером first // в количестве len элементов. procedure subList(PLFrom,PLTo:PList; first:integer; len:integer):PList; // Сортировки списка. Разрешается изменять содержимое элементов списка, сохраняя их позиции. procedure sortList(PL:PList); // сортирует список по возрастанию procedure sortListRev(PL:PList); // сортирует список по убыванию