数据结构——循环链表
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;
}
数据结构——循环链表相关推荐
- 数据结构——循环链表之约翰夫生死游戏
数据结构--循环链表之约翰夫生死游戏 一.什么是约翰夫生死游戏? 约瑟夫游戏的大意是: 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入还中,其 ...
- 基本数据结构----循环链表
循环链表是一种链式存储结构,它的最后一个节点指向头结点,形成一个环.因此,从循环链表中的任何一个结点出发都能找到任何其他结点.循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同 ...
- python算法与数据结构-循环链表
求链表长度 需要考虑的特殊情况,空链表或者链表当中只有一个节点的时候. 添加元素: 除了头部指向新节点,单向循环链表也需要尾节点指向新的节点 删除元素如下所示: 代码如下所示: # -*-coding ...
- python算法与数据结构-循环链表(41)
阅读目录 一.循环链表的介绍 二.循环链表基本操作的python代码实现 三.循环链表基本操作的C语言实现 一.循环链表的介绍 上一篇我们已经讲过单链表,本篇给大家讲解循单链表的一个变形是单向循环链表 ...
- Linux C 数据结构—-循环链表
前面我们学习了单向链表,现在介绍单向循环链表,单向循环链表是单链表的一种改进,若将单链表的首尾节点相连,便构成单向循环链表结构,如下图: 对于一个循环链表来说,其首节点和末节点被连接在一起.这种方式在 ...
- 数据结构 循环链表及其基本操作
目录 一.引入 二.循环链表的定义 三.单链表与循环链表对比 3.1图示对比 3.2代码对比 四.循环链表的操作 4.1循环链表的初始化 4.2循环链表的建立 4.2.1头插法建立循环链表 4.2.2 ...
- 头歌JAVA数据结构答案
头歌JAVA数据结构答案 一.Java数据结构-循环链表的设计与实现 第1关 单循环链表的实现-链表的添加.遍历 package step1; /*** Created by sykus on 201 ...
- 数据结构与算法--头歌(educoder)实训作业题目及答案
目录 Java 数据结构之图 第1关:图的表示 第2关:深度优先搜索 第3关:广度优先搜索 第4关:单源最短路径 Java 数据结构之排序 第1关:选择排序 第2关:插入排序 第3关:归并排序 第4关 ...
- [总结] 全部笔记博文目录总结(持续更新...)
计算机网络 [Linux] tcpdump 过滤传递给指定端口的数据 [Linux] 使用tcpkill杀掉tcp连接 [Linux]利用tcpdump打印sql语句 [linux] tcpdump抓 ...
最新文章
- Thread Per Message Pattern
- .net Redis使用公共方法引用CSRedisCore
- 语言nomogram校准曲线图_R语言实现Cox模型校准度曲线绘制
- Python之分组级运算——【transform()方法、apply()方法】
- JSP页面之前传输 中文乱码
- dg修改归档目录 oracle_OracleDG主库丢失归档增量同步
- HCIE-Security心得
- db2与mysql语法区别_db2和mysql语法的区别是什么
- 假如时光倒流,我会这么学习Java
- php鲜花销售管理系统论文,鲜花销售系统论文
- s3c2416 AT070TN83的LCD wince6.0驱动移植
- hdu 5455 Fang Fang 2015沈阳网络赛 模拟
- HCIA-IoT 个人学习总结 Day4
- 【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛
- 极致cms精仿小黑猿资源网源码
- 利用四位共阳数码管显示小数
- python日历节日表_python日历模块_Python日历模块| calendar()方法与示例
- dorado弹框方式
- 当在浏览器中输入一个域名后,会发生什么
- 制作ghost的linux系统安装方法,(转)linux系统GHOST备份方案