

13. Кольцевой двусвязный список.
Разновидностью связных списков является кольцевой (циклический, замкнутый) список. Он тоже может быть односвязным или двусвязным. Последний элемент кольцевого списка содержит указатель на первый, а первый (в случае двусвязного списка) — на последний.
Реализация такой структуры происходит на базе линейного списка. В каждом кольцевом списке есть указатель на первый элемент. В этом списке константы NULL не существует.
Также существуют циклические списки с выделенным головным элементом, облегчающие полный проход через список.
2 метода работы:
1 – Использование фиктивного элемента.
Endl^.right=Beginl
Beginl^.left= Endl
Алгоритм добавления первого элемента:
1.New (P)
2.P ^.right <- nil.
3.P ^.left <- nil
4.Begin L <- P
5.End L <- P
Алгоритм добавления в конец списка:
1.New (P)
2.P^.info <- C
3.P ^.right <- nil.
4.P ^.left < End l
5.End L ^. Right <- P
6.End L <- P
Алгоритм удаления элемента:
1.P <- Begin L
2.Begin L <- Begin L ^. Right.
3.Begin L ^. Left <- nil.
4.Dispose (P)
5.End L ^. Right <- Begin L
6.Begin L ^. Left
2 – без использования фиктивного элемента.
Алгоритм добавления первого элемента:
1.New (P)
2.P ^.right <- P
3.P ^.left <- P
4.Begin L <- P
5.End L <- P
Алгоритм добавления в конец списка:
1.New (P).
2.P ^.info <- C
3.P ^.right <- P2
4.P ^.right <- Begin L
5.Begin L ^.left <- P2
6.P ^.left <- End L
7.End L <- P.