데이터 구조-순환 연결 목록

순환 연결 목록은 첫 번째 요소가 마지막 요소를 가리키고 마지막 요소가 첫 번째 요소를 가리키는 연결 목록의 변형입니다. 단일 연결 목록과 이중 연결 목록을 모두 순환 연결 목록으로 만들 수 있습니다.

단일 연결 목록을 원형으로

단일 연결 목록에서 마지막 노드의 다음 포인터는 첫 번째 노드를 가리 킵니다.

이중 연결 목록을 원형으로

이중 연결 목록에서 마지막 노드의 다음 포인터는 첫 번째 노드를 가리키고 첫 번째 노드의 이전 포인터는 양방향으로 원형을 만드는 마지막 노드를 가리 킵니다.

위의 그림에 따라 고려해야 할 중요한 사항은 다음과 같습니다.

  • 마지막 링크의 다음은 단일 연결 목록과 이중 연결 목록의 두 경우 모두 목록의 첫 번째 연결을 가리 킵니다.

  • 이중 연결 목록의 경우 첫 번째 링크의 이전이 목록의 마지막을 가리 킵니다.

기본 작동

다음은 순환 목록에서 지원하는 중요한 작업입니다.

  • 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 프로그래밍 언어로 구현하는 방법에 대해 알아 보려면 여기 를 클릭하십시오 .