数据结构(六)——循环链表
一、循序链表简介
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 () { 明确的(); } };代码>