1.介绍

循环链表,故名思意,就是首尾相连的一个链表。

对于单链表来说,最后一个结点的指针不为nullptr,而是头指针,即存放头节点的地址。

对于双链表来说,头节点的prior指针指向最后一个结点,最后一个结点指针指向头节点。

 2.操作

我们分别对单链表和双链表进行讨论

(1)创建

单循环链表,初始时,头节点的指针存放头指针,即指向头节点自己。

template<typename>
LinkList<T>::LinkList()
{head=new node(0,head);
}

同理,双循环链表的两个指针都存放头指针,指向自己。

template<typename>
LinkList<T>::LinkList()
{head=new node(0,head,head);
}

(2)移动函数

移动函数判断超出范围的条件改为p==head。

template<typename T>
typename DLinkList<T>::node* DLinkList<T>::moveTo(int i)
{if (i < -1)return nullptr;node* p = head;for (int u = 0; u < i + 1; u++){p = p->next;if (p==head)//防止越界return nullptr;}return p;
}

(3)插入

单循环链表的插入和单链表操作基本相同。

双循环链表的插入和双循环链表有些区别。

下面第二个if语句可以去掉,因为双循环链表里没有一个结点是nullptr。

template<typename T>
bool DLinkList<T>::insert(int i, const T& val)
{node* pre = moveTo(i - 1);if (!pre)return false;//这句话运行后其实对双链表没什么影响,但可以想象如果没有下面一句,再下面的两句话颠倒就会出错node* p = new node(val,pre,pre->next);//if (pre->next)//确保pre->next不为nullptr,这里是与单链表不同的地方pre->next->prior = p;pre->next = p;return false;
}

(4)删除

单循环链表的删除和单链表操作基本相同。

双循环链表的删除和双循环链表有些区别。

最后一个if语句可以去掉,因为双循环链表里没有一个结点是nullptr。

template<typename T>
bool DLinkList<T>::remove(int i)
{node* pre = moveTo(i - 1);if (!pre)return false;//其实传入length上面是不会出错的,但我们不能删除length下标的元素node* p = pre->next;if (!p)//防止出界return false;pre->next = p->next;//if(pre->next)pre->next->prior = pre;delete p;
}

数据结构——循环链表相关推荐

  1. 数据结构——循环链表之约翰夫生死游戏

    数据结构--循环链表之约翰夫生死游戏 一.什么是约翰夫生死游戏? 约瑟夫游戏的大意是: 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入还中,其 ...

  2. 基本数据结构----循环链表

    循环链表是一种链式存储结构,它的最后一个节点指向头结点,形成一个环.因此,从循环链表中的任何一个结点出发都能找到任何其他结点.循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同 ...

  3. python算法与数据结构-循环链表

    求链表长度 需要考虑的特殊情况,空链表或者链表当中只有一个节点的时候. 添加元素: 除了头部指向新节点,单向循环链表也需要尾节点指向新的节点 删除元素如下所示: 代码如下所示: # -*-coding ...

  4. python算法与数据结构-循环链表(41)

    阅读目录 一.循环链表的介绍 二.循环链表基本操作的python代码实现 三.循环链表基本操作的C语言实现 一.循环链表的介绍 上一篇我们已经讲过单链表,本篇给大家讲解循单链表的一个变形是单向循环链表 ...

  5. Linux C 数据结构—-循环链表

    前面我们学习了单向链表,现在介绍单向循环链表,单向循环链表是单链表的一种改进,若将单链表的首尾节点相连,便构成单向循环链表结构,如下图: 对于一个循环链表来说,其首节点和末节点被连接在一起.这种方式在 ...

  6. 数据结构 循环链表及其基本操作

    目录 一.引入 二.循环链表的定义 三.单链表与循环链表对比 3.1图示对比 3.2代码对比 四.循环链表的操作 4.1循环链表的初始化 4.2循环链表的建立 4.2.1头插法建立循环链表 4.2.2 ...

  7. 头歌JAVA数据结构答案

    头歌JAVA数据结构答案 一.Java数据结构-循环链表的设计与实现 第1关 单循环链表的实现-链表的添加.遍历 package step1; /*** Created by sykus on 201 ...

  8. 数据结构与算法--头歌(educoder)实训作业题目及答案

    目录 Java 数据结构之图 第1关:图的表示 第2关:深度优先搜索 第3关:广度优先搜索 第4关:单源最短路径 Java 数据结构之排序 第1关:选择排序 第2关:插入排序 第3关:归并排序 第4关 ...

  9. [总结] 全部笔记博文目录总结(持续更新...)

    计算机网络 [Linux] tcpdump 过滤传递给指定端口的数据 [Linux] 使用tcpkill杀掉tcp连接 [Linux]利用tcpdump打印sql语句 [linux] tcpdump抓 ...

最新文章

  1. Thread Per Message Pattern
  2. .net Redis使用公共方法引用CSRedisCore
  3. 语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制
  4. Python之分组级运算——【transform()方法、apply()方法】
  5. JSP页面之前传输 中文乱码
  6. dg修改归档目录 oracle_OracleDG主库丢失归档增量同步
  7. HCIE-Security心得
  8. db2与mysql语法区别_db2和mysql语法的区别是什么
  9. 假如时光倒流,我会这么学习Java
  10. php鲜花销售管理系统论文,鲜花销售系统论文
  11. s3c2416 AT070TN83的LCD wince6.0驱动移植
  12. hdu 5455 Fang Fang 2015沈阳网络赛 模拟
  13. HCIA-IoT 个人学习总结 Day4
  14. 【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛
  15. 极致cms精仿小黑猿资源网源码
  16. 利用四位共阳数码管显示小数
  17. python日历节日表_python日历模块_Python日历模块| calendar()方法与示例
  18. dorado弹框方式
  19. 当在浏览器中输入一个域名后,会发生什么
  20. 制作ghost的linux系统安装方法,(转)linux系统GHOST备份方案

热门文章

  1. 七夕生成动态爱心图gif
  2. EXT4文件系统磁盘分布和部分特性介绍
  3. 使用YOLOV5-6.2预训练模型(yolov5s)进行detect的详细说明(detect.py)文件解析
  4. 10大优秀品质让你成功
  5. 计算机不通电维修思路,洛阳电脑主板不开机各种故障维修思路 无需更换
  6. 虚拟机VMware和kali的简易安装-2022最新
  7. Unity微信小游戏使用微信云开发记录
  8. 通过git下载下载Spring的源代码
  9. 基于位置服务,手机定位
  10. 那些被忽略的琐碎和点滴,才是浸透在生活中最明亮的勇气