Динамические структуры данных - составные структуры данных, динамически меняющие свой размер во время выполнения программы.
Односвязный список
Однонаправленный (односвязный) список - динамическая структура данных, состоящая из узлов (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);
}