Лабораторная 2. Двусвязные кольцевые списки

  1. Разработать модуль listunit_l2с.c для поддержки двусвязных кольцевых списков. В качестве примера - использовать предыдущую ЛР. Необходимые функции приведены ниже. Параметры функций и возвращаемый результат определяются студентом самостоятельно на основе требований для двусвязных кольцевых списков:
     // создает узел
     createNodeLC2
     // вставляет узел в начало списка и возвращает вставленный узел 
     addFirstNodeLC2
     // вставляет узел в конец списка и возвращает вставленный узел 
     addLastNodeLC2
     // вставляет узел в список после переданного узла и возвращает вставленный узел 
     insertAfterNodeLC2
     // уничтожает узел и устанавливает его в NULL
     disposeNodeLC2
     // удаляет узел из списка и возвращает удаленный узел
     deleteNodeLC2
     // уничтожает список и устанавливает его в NULL
     disposeListLC2
    
     // выполняет функцию func над каждым узлом списка
     // если func возвращает 0, listAction завершает перебор узлов списка  
     typedef int (*listfunc)(char*);
     listActionLC2
     // выводит список в стандартный поток вывода
     listOutLC2
     // возвращает количество элементов в списке
     listCountLC2
     // Объединяет данные элементов списка в строку с использованием разделителя
     // delimiter между отдельными данными. 
     // Полученную строку заносит в dest и возвращает в качестве результата функции.
     // Длина результирующей строки не должна превышать maxsize.
     // Если maxsize==0, ограничения на длину строки снимаются
     // Если dest==NULL, функция самостоятельно выделяет оперативную память,
     // достаточную для хранения maxsize символов. Освобождение памяти возлагается
     // на программиста.     
     char *listSumStrLC2
    
  2. Создать программу/набор программ для проверки работоспособности всех функций модуля.