首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单循环链表-带头双向循环链表的实现

带头双向循环链表   前言   对于链表来说,不只有单链表这一个品种;   链表有很多种形态   按方向分:单向、双向   按带不带头:带头、不带头   按循环:循环、不循环   1、单向或则双向:...今天我们就来学习一下结构最复杂的带头双向循环链表!!!...;   虽然名字听上去比较复杂单循环链表,但是实现起来比单链表(全名:不带头、不循环、单向链表)更加简单,也不需要过多考虑特殊情况;   两种链表的比较:(上面是单链表,下面是带头双向循环链表)   结构分析...  首先链表的头节点是不存储有效数据的(该节点被称为哨兵位),其次我们只需要知道改头节点的指针就能找到整个链表单循环链表,并且便于对整个链表进行维护;   当然既然是双向的嘛,那节点一定有个指针域指向前一个节点...  该链表的尾插,比单链表的尾插简单太多了,不用遍历找尾:    // 双向链表尾插 void ListPushBack(ListNode* pHead, LTDataType

58130
您找到你想要的搜索结果了吗?
是的
没有找到

【数据结构】线性表 ④ ( 循环链表 单循环链表 | 代码示例 - 使用 Java 实现 单循环链表 )

一、循环链表 ( 单循环链表 ) 在 单链表 中 , 将 最后一个节点 的指针 指向 第一个节点 , 形成一个闭环 , 上述 头尾相连 的单链表 称为 " 单循环链表 " , 简称为 " 循环链表 "...; 在 循环链表 中 , 没有明确的 第一个节点 或 最后一个节点 ; 循环链表 可以 模拟 环形结构 数据 , 如 : 循环队列 ; 二、代码示例 - 使用 Java 实现 单循环链表 在下面的代码中...单链表 的首元素 , 借助该元素 , 可以访问所有的链表数据 ; 新增节点 : 调用 CircularLinkedList#append 函数 , 可以新增一个节点 , 先创建一个新节点 newNode..., 然后判断 链表首元素 head 是否为空 , 链表首元素为空 , 即链表为空 ; 如果链表为空 , 我们将头指针 head 指向新节点 , 并将新节点的 next 指针 指向自身,以形成循环。...如果链表非空 , 我们遍历链表找到最后一个节点 , 并将其 next 指针 指向新节点 , 再将新节点的next指针指向头节点 ; 使用 Java 语言实现 单循环链表 : public class Node

21330

单循环链表-这么好的单链表结构怎么能不会呢?带哨兵位头节点双向循环链表

带哨兵位头节点双向循环链表的基本操作   这一次,会写的规范一点。   准备3个文件,一个头件,一个链表操作文件,一个主函数所在的文件,和通讯录那一篇设计是一样的。   ...void ListDestory(ListNode* pHead); // 双向链表打印 void ListPrint(ListNode* pHead); // 双向链表尾插...(ListNode* pHead); // 双向链表查找 ListNode* ListFind(ListNode* pHead, LTDataType x); // 双向链表在pos...④:pHead->_next =   ③:pHead->_next->_prev =   先执行④单循环链表,pHead->_next不再指向原第一个节点    void ListPushFront...不能删除头节点单循环链表,不然主函数中的头指针会非法访问。

29210

数据结构 | 每日一练(57)

1.假设一个单循环链表,其结点含有三个域 pre、data、link。其中 data 为数据域;pre 为指针域,它的值为空指针(NIL);link 为指针域,它指向后继结点。...请设计算法,将此表改成双向循环链表。 正确答案 ps:||代表注释 1....[题目分析] 将具有两个链域的单循环链表,改造成双向循环链表,关键是控制给每个结点均置上指向前驱的指针,而且每个结点的前驱指针置且仅置一次。...void StoDouble(LinkedList la)∥la是结点含有pre,data,link三个域的单循环链表。其中data为数据域,pre为空指针域,link是指向后继的指针域。...[算法讨论] 算法中没有设置变量记住单循环链表的起始结点,至少省去了一个指针变量。当算法结束时,la恢复到指向刚开始操作的结点,这是本算法的优点所在。

3763229

【数据结构】线性表 ⑤ ( 双循环链表 | 双循环链表特点 | 双循环链表插入操作处理 | 代码示例 - 使用 Java 实现 双循环链表 )

一、双循环链表 " 双循环链表 " 是 在 单循环链表 的基础上 , 在每个 节点 中 , 新增一个 指针 , 指向 该节点 的 前驱节点 ; 双向循环链表 每个 节点 都包含 数据 和 两个指针 ,...一个指针指向前一个节点 , 一个指针指向后一个节点 ; 与 单循环链表相比 , 双循环链表 可以在两个方向上遍历整个链表 , 单循环链表 只能在一个方向上遍历链表 ; 二、双循环链表特点 双循环链表 特点...: 闭环结构 : 第一个节点 的 前驱指针 指向最后一个节点 ; 最后一个节点 的 后继指针 指向第一个节点 ; 遍历方向 : 双循环链表 可以从头部节点 向前遍历 , 也可以向后遍历 ; 高效增删节点...: 双循环链表 中 , 可以在 任意位置 增删节点 , 双循环链表中可以双向遍历 , 增删节点 效率更高 ; LRU 缓存算法中 , 一般使用 双循环链表 数据结构 ; 三、双循环链表插入操作处理 双循环链表...中 , 需要对 插入 / 删除 / 遍历 操作 进行特殊处理 , 因为需要调节 前驱指针 和 后继指针 两个指针 ; 如 : 双循环链表 中 , 如果要插入元素 , 将 c 节点 插入到 a 节点 和

17120

数据结构 | 每日一练(44)

(2)设有两个链表,ha 为单向链表,hb 为单向循环链表。编写算法,将两个链表合并成一个单向链表,要求算法所需时间与链表长度无关。 正确答案 ps:||代表注释 1....应该使用只设尾指针的单循环链表。 LinkedList Union(LinkedList la,lb) ∥la和lb是两个无头结点的循环单链表的尾指针,本算法将lb接在la后,成为一个单循环链表。...return(lb); ∥返回结果单循环链表的尾指针lb。 }∥算法结束。...free(q); ∥释放lb的头结点 return(lb); ∥返回结果单循环链表的尾指针lb。...(2)[题目分析]本题要求将单向链表ha和单向循环链表hb合并成一个单向链表,要求算法所需时间与链表长度无关,只有使用带尾指针的循环单链表,这样最容易找到链表的首、尾结点,将该结点序列插入到单向链表第一元素之前即可

9883529

线性表--顺序表--循环链表(五)

一.介绍 单循环链表,简称循环链表,是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。...和单链表唯一的区别就是,尾结点指向头结点,因此循环链表中没有NULL指针。...而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链表上易于实现。 二.图示 单链表是这样的: ? 循环链表是这样的: ?...二.代码实现 1.定义链表 上面已经说过,循环链表和单链表唯一的不同就在于尾结点指向头结点,所以链表的定义和单链表一样。...} 至于循环链表的增删查改,都同单链表一样,我们就不在多赘述,只是在遍历这块有一定小猫腻。

48230

数据结构与算法(四)-线性表之循环链表

前言:前面几篇介绍了线性表的顺序和链式存储结构,其中链式存储结构为单向链表(即一个方向的有限长度、不循环的链表),对于单链表,由于每个节点只存储了向后的指针,到了尾部标识就停止了向后链的操作。...也就是说只能向后走,如果走过了,就回不去了,还得重头开始遍历,所以就衍生出了循环链表 一、简介   定义:将单链表中中断结点的指针端有空指针改为指向头结点,就使整个单链表形成一个环,这种头尾详解的单链表称为单循环链表...由单链表变化的循环也成为单向循环链表; 循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活; 二、单向循环链表的实现   循环链表是在单链表(线性单链表)的基础上,将尾节点的...三、问题 判断单链表中是否有环?   思考:有环的定义是,链表的尾节点指向了链表中的某个节点;   那么怎么判断是否有环的存在呢?...②在单链表中,从一已知结点出发,只能访问到该结点及其后续结点,无法找到该结点之前的其它结点。而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链表上易于实现。

1.2K30

数据结构之线性表

全文概要 ---- 线性表实现有两种方式,一种为顺序表,另一种为链表。本文分别介绍了顺序线性表、单向链表、双向链表和循环链表的基本结构,并给出了相应的C++类代码实现。...顺序表的类声明及定义如下: Header Implementation SqList.h SqList.cc 单链表(Linked List) ---- 单链表是一种最简单的线性表的链式存储结构,单链表也称为线性链表...即在链表中,逻辑位置连续的结点,物理存储空间不必连续 简单线性链表(Simple Linked List) 线性链表简单实现为数据成员只有头指针。...,它的结点结构与普通单链表相同,不同的是在循环链表中尾结点的next域不为空,而是指向起头结点,这样就将单链表首尾相接成为一个环。...简单循环链表(Simple Circular Linked List) 简单循环链表的类声明及定义如下: Header Implementation SimpleCircLinkList.h SimpleCircLinkList.cc

31820

数据结构-循环链表的PHP实现

1.将单链表中终端结点的指针端由空指针改为指向头结点,单循环链表,循环链表和单链表的主要差异就在于循环的判断条件上 原来是判断p->next是否为空,现在则是p->next不等于头结点,则循环未结束...2.指向终端结点的尾指针代表该循环链表 3.创建循环链表关键是头结点指向自身,最后一个终端结点指向头结点 <?...php class Node{ public $data; public $next; } //创建一个链表 $linkList=new Node(); //头结点指向自身...//最后一个结点指向头结点 $node->next=$linkList; $temp->next=$node; $temp=$node; } //循环链表的遍历..." "); } } //循环链表的优势 function printLoopLink3($linkList){ //循环链表的优势,从第三个结点开始遍历,遍历全部链表

73020

【数据结构】线性表 ② ( 链式存储结构 - 链表 | 链表分类 - 单链表链表 非循环链表 循环链表 | 链表优缺点 )

一、链式存储结构 - 链表 链式存储结构 就是 链表 LinkedList ; 链式存储结构 ( 链表 ) : 数据 存储在 节点 中 , 每个节点包含 数据值 和 指向下一个节点的指针 ; 通过节点之间的指针关系...Object data; // 指向下一个节点 Node next; // 指向上一个节点 Node last; } 二、链表分类 - 单链表 / 双链表 / 非循环链表 / 循环链表链表...与 双链表 : 单链表 : 上述链表是 单链表 , 单链表 只有一个指针 指向下一个节点 ; 双链表 : 还有一种链表是 双链表 , 双链表 有两个指针 , 一个指向下一个节点 , 一个指向上一个节点...; 循环链表 : 如果 最后一个节点的指针 指向 第一个节点 , 那么这个链表就是循环链表 ; 链表可以分为以下四类 : 单链表 单循环链表链表 双循环链表 三、链表优缺点 链表 LinkedList...链表 LinkedList 缺点: 查询 性能低 : 如果要访问 链表中 指定位置的元素 , 需要从头节点开始遍历到目标位置 , 时间复杂度为O(n)。

24440

线性表--单链表--循环链表--双链表--三表总结(七)

链表: ? 单链表就好比是一条路走到黑,无法回头,如果要访问任意结点,每次只能从头访问,也就是顺序访问,它的遍历只能是一个方向,不能后退 循环链表: ? ?...循环链表中没有NULL指针,涉及遍历时,终止条件不再是单链表的P!...=NULL;而是判断他们是否等于某一个特定的指针,单链表只能从已知结出发,访问其后续结点,而循环链表从已知结点出发,可以访问链表中所有结点。 双向链表: ?...虽然有了循环链表,但是如果数据庞大,想要得到已知结点前面的数据,再跑一圈的成本有点大,这个时候,双向链表就出来了,双向链表增加了前驱指针,它可以随心所欲,向前,或者是向后访问。...总结: 单链表:如果访问任意结点每次只能从头开始顺序向后访问。 单循环链表:可以从任何一个结点开始,顺序向后访问到达任意结点。 双向链表:可以从任何结点开始任意向前向后双向访问。

1K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券