Lila25mila
08 квітня 2019 р. 13:44

Типи зв'язаного списку - однозв'язні, двозв'язні та круговий

Існує три поширені типи зв'язаного списку.

  • Єдиний пов'язаний список
  • Двозв'язковий список
  • Круговий зв'язаний список

Єдиний пов'язаний список

Це найпоширеніший. Кожен вузол має дані та покажчик на наступний вузол.

Де адреса першого вузла спеціальне ім'я, зване HEAD.
Останній вузол у зв'язаному списку вказує NULL.

Вузол представлений як:

  1. struct node {
  2. int data;
  3. struct node *next;
  4. }

Триелементний однозв'язний список може бути створений як:

  1. /* Инициализируем узлы */
  2. struct node *head;
  3. struct node *one = NULL;
  4. struct node *two = NULL;
  5. struct node *three = NULL;
  6.  
  7. /* Выделяем память */
  8. one = malloc(sizeof(struct node));
  9. two = malloc(sizeof(struct node));
  10. three = malloc(sizeof(struct node));
  11.  
  12. /* Назначаем значения данных */
  13. one->data = 1;
  14. two->data = 2;
  15. three->data = 3;
  16.  
  17. /* Соединяем узлы */
  18. one->next = two;
  19. two->next = three;
  20. three->next = NULL;
  21.  
  22. /* Сохраняем адрес первого узла в голове */
  23. head = one;
Двозв'язковий список

Ми додаємо вказівник на попередній вузол у двозв'язному списку. Таким чином, ми можемо йти у будь-якому напрямку: вперед (next) чи назад (prev).

Вузол представлений як:

  1. struct node {
  2. int data;
  3. struct node *next;
  4. struct node *prev;
  5. }

Двозв'язковий список із трьох учасників може бути створений як:

  1. /* Инициализируем узлы */
  2. struct node *head;
  3. struct node *one = NULL;
  4. struct node *two = NULL;
  5. struct node *three = NULL;
  6.  
  7. /* Выделяем память */
  8. one = malloc(sizeof(struct node));
  9. two = malloc(sizeof(struct node));
  10. three = malloc(sizeof(struct node));
  11.  
  12. /* Назначаем значения данных */
  13. one->data = 1;
  14. two->data = 2;
  15. three->data = 3;
  16.  
  17. /* Соединяем узлы */
  18. one->next = two;
  19. one->prev = NULL;
  20.  
  21. two->next = three;
  22. two->prev = one;
  23.  
  24. three->next = NULL;
  25. three->prev = two;
  26.  
  27. /* Сохраняем адрес первого узла в голове */
  28. head = one;
Круговий зв'язаний список

Круговий зв'язаний список - варіант пов'язаного списку, в якому останній елемент пов'язаний з першим елементом. Це утворює кругову петлю.

Круговий зв'язаний список може бути однозв'язковим, або двозв'язковим.

  • Для однозв'язкового списку покажчик next останнього елемента вказує на перший елемент;
  • У двозв'язному списку покажчик prev першого елемента також вказує на останній елемент.

Круговий однозв'язковий список із трьох членів може бути створений як:

  1. /* Инициализируем узлы */
  2. struct node *head;
  3. struct node *one = NULL;
  4. struct node *two = NULL;
  5. struct node *three = NULL;
  6.  
  7. /* Выделяем память */
  8. one = malloc(sizeof(struct node));
  9. two = malloc(sizeof(struct node));
  10. three = malloc(sizeof(struct node));
  11.  
  12. /* Назначаем значения данных */
  13. one->data = 1;
  14. two->data = 2;
  15. three->data = 3;
  16.  
  17. /* Соединяем узлы */
  18. one->next = two;
  19. two->next = three;
  20. three->next = one;
  21.  
  22. /* Сохраняем адрес первого узла в голове */
  23. head = one;

По статті запитували0питання

1

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…