数据结构之循环链表C++
我们都知道线性结构的链表非常方便,非常好用。但是真的就是最好的吗?很显然在程序设计中没有最好,只有最实用的。我们在使用链表时,会不断开空间,再释放空间。对于大量重复的使用链表来说,这样是比较消耗效率的。
鉴于以上所言,今天给大家分享一种用内存换效率的循环链表。设计思路如下:
既然开空间,释放空间比较耗效率,那咱们就把链表中删除的空间,临时储存起来,等到下次需要新空间的时候,直接提取出来用如下图:
下面就开始创建循环链表
这里我们使用双向链表结构,因为要不不断取节点,存节点,双向链表的可读性更高
首先创建一个泛型的双向链表
链表创建好之后,就是初始化,4个基本。构造,析构,复制构造,同类赋值
为了简化方便使用,复制构造,同类赋值的时候,库节点对应的内容其实不用拷贝
因为对于用户来说有用的数据只是头节点对应的,这里我就不写了 留到下次分享把!
初始化已经完成直接上核心代码把
我们在增加一个节点的时候,双向链表头尾相连,其实有一句比较简单的话术
new 一个新节点,然后链表的尾部等于头节点的上一个,我称为尾节点
那么这句话术就是
尾节点的下一个是新节点,新节点上一个是尾节点
新节点的下一个是头节点 ,头节点的上一个是新节点
既然我们已经知道如何创建一个节点,并且知道怎么链接
那么接下来就该考虑 这个新节点怎么来?
当然数据结构的库节点不存在数据时这个节点肯定是new 出来
当数据结构存在数据就从库节点拿
如上图所示,红圈的代码应该拿下来。为了看得更清楚,就先这样。
首先创建一个新节点,判断库节点没有数据时就像上面所说的创建一个新节点
而库节点有数据的时候 新节点就是库节点的最后一个,然后断开新节点链接
再执行一遍红圈的内容,既然有了重复代码,再考虑到后期删除节点的问题,
不如把链接节点,和取出节点封装成两个函数
基本上循环链表的核心代码已经分享一半了,将分三次分享。希望对您有用!
数据结构,高效率循环链表一
最新推荐文章于 2021-09-29 21:54:43 发布