Структура данных - круговой связанный список

Круговой связанный список - это разновидность связанного списка, в котором первый элемент указывает на последний элемент, а последний элемент указывает на первый элемент. Как односвязный список, так и двусвязный список можно превратить в круговой связанный список.

Односвязный список в виде циркуляра

В односвязном списке следующий указатель последнего узла указывает на первый узел.

Двусвязный список в виде циркуляра

В двусвязном списке следующий указатель последнего узла указывает на первый узел, а предыдущий указатель первого узла указывает на последний узел, образуя круг в обоих направлениях.

В соответствии с приведенной выше иллюстрацией следует учитывать следующие важные моменты.

  • Следующая последняя ссылка указывает на первую ссылку в списке как в односвязном, так и в двусвязном списке.

  • Предыдущая первая ссылка указывает на последнюю в списке в случае двусвязного списка.

Основные операции

Ниже перечислены важные операции, поддерживаемые круговым списком.

  • 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, нажмите здесь .