Существует три распространенных типа связанного списка.
- Единственный связанный список
- Двусвязный список
- Круговой связанный список
Единственный связанный список
Это самый распространенный. Каждый узел имеет данные и указатель на следующий узел.
Где адрес первого узла специальное имя, называемое 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;