データ構造-循環リンクリスト

循環リンクリストは、最初の要素が最後の要素を指し、最後の要素が最初の要素を指すリンクリストのバリエーションです。単一リンクリストと二重リンクリストの両方を循環リンクリストにすることができます。

循環としての単一リンクリスト

単一リンクリストでは、最後のノードの次のポインタが最初のノードを指します。

循環としての二重リンクリスト

二重リンクリストでは、最後のノードの次のポインタが最初のノードを指し、最初のノードの前のポインタが最後のノードを指し、両方向に循環します。

上図のように、考慮すべき重要な点は次のとおりです。

  • 最後のリンクの次は、単一リンクリストと二重リンクリストの両方の場合に、リストの最初のリンクを指します。

  • 二重リンクリストの場合、最初のリンクの前はリストの最後を指します。

基本操作

以下は、循環リストでサポートされている重要な操作です。

  • 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プログラミング言語での実装については、ここをクリックしてください。