数据结构(六)——循环链表

  

数据结构(六)——循环链表

  

一、循序链表简介

  

1,循环链表的定义

  

循环链表的任意元素都有一个前驱和一个后继,所有数据元素在关系上构成逻辑上的环。
循环链表是一种特殊的单链表,尾结点的指针指向首结点的地址。
循环链表的逻辑关系图如下:
数据结构(六)——循环链表

  

2,循环链表的设计实现

  

循环链表的设计实现要点:
,通过模板定义CircleList,继承自LinkedList
B,定义连接链表首尾的内部函数
C,实现首元素的插入和删除操作
D,重写清空操作和遍历操作

  

3,循环链表的实现关键

  

,插入位置为0时,头结点和尾结点均指向新结点,新结点作为首结点插入链表。
B,删除位置为0时,头结点和尾结点指向位置为1的结点,删除销毁首结点

  

二,循环链表的操作

  

1,尾结点获取

  
 <代码>节点*去年()
  {
  返回这个→位置(这→m_length - 1)→下;
  } 
  

2,首尾结点连接

  
 <代码>空白lastToFirst ()
  {
  last()→下一个=鷐_header.next;
  } 
  

三,循环链表的实现

  
 <代码>模板& lt; typename T>
  类CircleList:公共LinkedList
  {
  保护:
  typedef typename LinkedList::除去(指数);
  }
  返回受潮湿腐烂;
  }
  bool集(int指数,const T&值)
  {
  指数=国防部(指数);
  返回LinkedList next;
  }
  返回受潮湿腐烂;
  }
  空白clear ()
  {//删除链表中结点至头结点
  而(-> m_length> 1)
  {
  删除(1);
  }//删除首结点
  如果(这-> m_length==1)
  {
  节点* toDel=-> m_header.next;
  -> m_header。下一个=零;
  这-> m_current=零;
  -> m_length=0;
  这->摧毁(toDel);
  }
  }
  bool移动(pos int, int步骤)
  {
  pos=国防部(pos);
  返回LinkedList ::移动(pos、步骤);
  }
  bool结束()
  {
  返回(-> m_length==0) | |(这个-> m_current==NULL);
  }
  ~ CircleList ()
  {
  明确的();
  }
  }; 
  

四,约瑟夫环(约瑟夫)

数据结构(六)——循环链表