📜  数据结构-循环链表

📅  最后修改于: 2021-01-11 06:42:50             🧑  作者: Mango


循环链表是链表的一种变体,其中第一个元素指向最后一个元素,最后一个元素指向第一个元素。单链表和双链表都可以制成循环链表。

单链接列表作为通函

在单链列表中,最后一个节点的下一个指针指向第一个节点。

单链接列表作为循环链接列表

双链表作为通函

在双向链表中,最后一个节点的下一个指针指向第一个节点,第一个节点的前一个指针指向在两个方向上都形成圆形的最后一个节点。

双链表作为循环链表

根据上面的说明,以下是要考虑的重点。

  • 无论是单链列表还是双链列表,最后一个链接的下一个都指向列表的第一个链接。

  • 如果是双向链接列表,则第一个链接的前一个指向列表的最后一个。

基本操作

以下是通告列表支持的重要操作。

  • 插入-插入一个元素在列表的开始。

  • 从列表中删除开头的元素-删除

  • 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编程语言实现的信息,请单击此处