👜22. Динамические структуры данных. Односвязный список, стек и очередь. Алгоритмы их обработки.
Динамические структуры данных - составные структуры данных, динамически меняющие свой размер во время выполнения программы.
Односвязный список
Однонаправленный (односвязный) список - динамическая структура данных, состоящая из узлов (Node). Каждый узел хранит значение и указатель на следующий узел. Последний узел хранит указатель на NULL.
// Пример реализации узлаstruct Node { Book data; //поле данныхstruct Node* next; //укзатель на следующий элемент};
Доступные операции:
Создание списка
Добавление элемента в список
Удаление узла списка
Удаление всего списка
Операции обхода списка
Создание списка
struct Node *init(int a) // а - значение первого узла{struct Node *list; list = (struct Node*)malloc(sizeof(struct Node)); // выделение памяти под корень спискаlist->data = a;list->next =NULL; // это последний узел спискаreturn(list);}
Добавление элемента в список:
Выделить память под элемент
Добавить в него ссылку на следующий
Связать предыдущий элемент с новым
struct Node *addelem(struct Node *list,int number){struct Node *temp,*p; temp = (struct Node*)malloc(sizeof(Node)); p =list->ptr; // сохранение указателя на следующий узелlist->ptr = temp; // предыдущий узел указывает на создаваемыйtemp->data = number; // сохранение поля данных добавляемого узлаtemp->next = p; // созданный узел указывает на следующий элементreturn(temp);}
Удаление элемента из списка:
Связать предыдущий и следующий
Очистить память от текущего
struct Node *deletelem(struct Node *list,struct Node *root){struct Node *temp; temp = root;while (temp->next != list) // просматриваем список начиная с корня { // пока не найдем узел, предшествующий list temp =temp->next; }temp->next =list->next; // переставляем указательfree(list); // освобождаем память удаляемого узлаreturn(temp);}
Удаление корня списка
struct Node *deletehead(struct Node *root){struct Node *temp; temp =root->ptr;free(root); // освобождение памяти текущего корняreturn(temp); // новый корень списка}
Стек
Стек - динамическая структура данных, организованная по принципу LIFO (Last in first out).