Існує три поширені типи зв'язаного списку.
- Єдиний пов'язаний список
- Двозв'язковий список
- Круговий зв'язаний список
Єдиний пов'язаний список
Це найпоширеніший. Кожен вузол має дані та покажчик на наступний вузол.
Де адреса першого вузла спеціальне ім'я, зване HEAD.
Останній вузол у зв'язаному списку вказує NULL.
Вузол представлений як:
- struct node {
- int data;
- struct node *next;
- }
Триелементний однозв'язний список може бути створений як:
- /* Инициализируем узлы */
- struct node *head;
- struct node *one = NULL;
- struct node *two = NULL;
- struct node *three = NULL;
- /* Выделяем память */
- one = malloc(sizeof(struct node));
- two = malloc(sizeof(struct node));
- three = malloc(sizeof(struct node));
- /* Назначаем значения данных */
- one->data = 1;
- two->data = 2;
- three->data = 3;
- /* Соединяем узлы */
- one->next = two;
- two->next = three;
- three->next = NULL;
- /* Сохраняем адрес первого узла в голове */
- head = one;
Двозв'язковий список
Ми додаємо вказівник на попередній вузол у двозв'язному списку. Таким чином, ми можемо йти у будь-якому напрямку: вперед (next) чи назад (prev).
Вузол представлений як:
- struct node {
- int data;
- struct node *next;
- struct node *prev;
- }
Двозв'язковий список із трьох учасників може бути створений як:
- /* Инициализируем узлы */
- struct node *head;
- struct node *one = NULL;
- struct node *two = NULL;
- struct node *three = NULL;
- /* Выделяем память */
- one = malloc(sizeof(struct node));
- two = malloc(sizeof(struct node));
- three = malloc(sizeof(struct node));
- /* Назначаем значения данных */
- one->data = 1;
- two->data = 2;
- three->data = 3;
- /* Соединяем узлы */
- one->next = two;
- one->prev = NULL;
- two->next = three;
- two->prev = one;
- three->next = NULL;
- three->prev = two;
- /* Сохраняем адрес первого узла в голове */
- head = one;
Круговий зв'язаний список
Круговий зв'язаний список - варіант пов'язаного списку, в якому останній елемент пов'язаний з першим елементом. Це утворює кругову петлю.
Круговий зв'язаний список може бути однозв'язковим, або двозв'язковим.
- Для однозв'язкового списку покажчик next останнього елемента вказує на перший елемент;
- У двозв'язному списку покажчик prev першого елемента також вказує на останній елемент.
Круговий однозв'язковий список із трьох членів може бути створений як:
- /* Инициализируем узлы */
- struct node *head;
- struct node *one = NULL;
- struct node *two = NULL;
- struct node *three = NULL;
- /* Выделяем память */
- one = malloc(sizeof(struct node));
- two = malloc(sizeof(struct node));
- three = malloc(sizeof(struct node));
- /* Назначаем значения данных */
- one->data = 1;
- two->data = 2;
- three->data = 3;
- /* Соединяем узлы */
- one->next = two;
- two->next = three;
- three->next = one;
- /* Сохраняем адрес первого узла в голове */
- head = one;