Структура данных - круговой связанный список
Круговой связанный список - это разновидность связанного списка, в котором первый элемент указывает на последний элемент, а последний элемент указывает на первый элемент. Как односвязный список, так и двусвязный список можно превратить в круговой связанный список.
Односвязный список в виде циркуляра
В односвязном списке следующий указатель последнего узла указывает на первый узел.
Двусвязный список в виде циркуляра
В двусвязном списке следующий указатель последнего узла указывает на первый узел, а предыдущий указатель первого узла указывает на последний узел, образуя круг в обоих направлениях.
В соответствии с приведенной выше иллюстрацией следует учитывать следующие важные моменты.
Следующая последняя ссылка указывает на первую ссылку в списке как в односвязном, так и в двусвязном списке.
Предыдущая первая ссылка указывает на последнюю в списке в случае двусвязного списка.
Основные операции
Ниже перечислены важные операции, поддерживаемые круговым списком.
insert - Вставляет элемент в начало списка.
delete - Удаляет элемент с начала списка.
display - Отображает список.
Операция вставки
Следующий код демонстрирует операцию вставки в круговой связанный список на основе односвязного списка.
пример
insertFirst(data):
Begin
create a new node
node -> data := data
if the list is empty, then
head := node
next of node = head
else
temp := head
while next of temp is not head, do
temp := next of temp
done
next of node := head
next of temp := node
head := node
end if
End
Операция удаления
Следующий код демонстрирует операцию удаления в круговом связном списке на основе односвязного списка.
deleteFirst():
Begin
if head is null, then
it is Underflow and return
else if next of head = head, then
head := null
deallocate head
else
ptr := head
while next of ptr is not head, do
ptr := next of ptr
next of ptr = next of head
deallocate head
head := next of ptr
end if
End
Отображение списка операций
Следующий код демонстрирует работу списка отображения в круговом связном списке.
display():
Begin
if head is null, then
Nothing to print and return
else
ptr := head
while next of ptr is not head, do
display data of ptr
ptr := next of ptr
display data of ptr
end if
End
Чтобы узнать о его реализации на языке программирования C, нажмите здесь .