美文网首页数据结构和算法分析算法
从零开始养成算法·篇三:双向链表与双向循环链表

从零开始养成算法·篇三:双向链表与双向循环链表

作者: 文竹_自然 | 来源:发表于2020-04-04 22:44 被阅读0次

一、双向链表

1、定义:从下图中的定义结点的代码我们能发现,双向与单向最明显的区别就是是否可以反向查找上一结点。

定义

2、创建:大致和单向的创建差不多,区别在于多了prior的处理

步骤:

1、*L 指向头结点

2、新增数据:

2.1.创建1个临时的结点

2.2.为新增的结点建立双向链表关系

① temp 是p的后继

② temp 的前驱是p

③ p 要记录最后的结点的位置,方便下一次插入

创建新链表

3、插入:

步骤:

1. 插入的位置不合法 为0或者为负数

2. 新建结点

3.将p指向头结点!

4. 找到插入位置i直接的结点

5. 如果插入的位置超过链表本身的长度

6. 判断插入位置是否为链表尾部

1️⃣ 将p->next 结点的前驱prior = temp

2️⃣ 将temp->next 指向原来的p->next

3️⃣ p->next 更新成新创建的temp

4️⃣ 新创建的temp前驱 = p

插入指定位置

4、删除

1.判断双向链表是否为空,如果为空则返回0

2. 将指针p移动到删除元素位置前一个

3.如果k>i 或者 p == NULL 则返回0

4.创建临时指针delTemp 指向要删除的结点,并将要删除的结点的data 赋值给*e,带回到main函数

5. p->next 等于要删除的结点的下一个结点

6. 如果删除结点的下一个结点不为空,则将将要删除的下一个结点的前驱指针赋值p

7. 删除delTemp结点

删除

二、双向循环链表

1、创建

步骤:

1、*L 指向头结点

2、新增数据:

2.1.创建1个临时的结点

2.2.为新增的结点建立双向链表关系

① temp 是p的后继

② temp 的前驱是p

③ temp的后继是*L

④ p 的前驱是新建的temp

⑤ p 要记录最后的结点的位置,方便下一次插入

初始化或创建

2、插入

步骤:

1. 创建指针p,指向双向链表头

2.双向循环链表为空,则返回0

3.找到插入前一个位置上的结点p

4.如果i>index 则返回0

5.创建新结点temp

6.temp 结点为空,则返回error

7.将生成的新结点temp数据域赋值e.

8.将结点temp 的前驱结点为p;

9.temp的后继结点指向p->next;

10.p的后继结点为新结点temp;

11.如果temp 结点不是最后一个结点,temp节点的下一个结点的前驱为temp 结点

插入

3、删除

步骤:

1.如果删除到只剩下首元结点了,则直接将*L置空;

2.找到要删除的结点

3.给e赋值要删除结点的数据域

4.修改被删除结点的前驱结点的后继指针 

5.修改被删除结点的后继结点的前驱指针 

6. 删除结点temp

删除

相关文章

  • 双向链表&双向循环链表

    链表分为:单链表、单向循环链表、双向链表、双向循环链表本节主要说明:双向链表、双向循环链表 定义结点 一、双向链表...

  • 如何设计一个内存缓存库

    双向链表 + LRU淘汰算法 + 线程安全 双向链表的设计 用OC来设计双向链表(不是循环链表) 单个节点 整个链...

  • 0x05双向循环链表

    1 双向循环链表创建 2 双向循环链表插入元素 3 遍历双向循环链表 4双向循环链表删除结点

  • 链表

    链表 缺点:查找复杂有点:定点删除/插入元素 单链表 双向链表 循环链表 双向循环链表 数组与链表的区别 数据存储...

  • 双向链表

    双向链表的结构 既然单链表有循环链表,双向链表当然也有双向循环链表,如下图: 问: 双向链表中某个节点p的后继节点...

  • 线性表--链式存储结构--双向链表

    双向链表 一、双向链表结构 双向链表结点结构 既然单链表可以有循环链表,那么双向链表当然也可以有。 由于这是双向链...

  • 从零开始养成算法·篇三:双向链表与双向循环链表

    一、双向链表 1、定义:从下图中的定义结点的代码我们能发现,双向与单向最明显的区别就是是否可以反向查找上一结点。 ...

  • 单链表线性表

    用链表来表示线性表,还有循环链表,双向链表其中算法很多都是相同的,循环链表的特点是最后一个指针指向头指针,双向链表...

  • 总结

    Android篇 数据结构与算法顺序表 - ArrayList源码链表 - 单向链表、双向链表 - LinkedL...

  • 数据结构与算法之数组与链表

    线性表包括数组,链表(单链表,双向链表,循环链表,双向循环链表,静态链表),栈(顺序栈,链式栈),队列(普通队列,...

网友评论

    本文标题:从零开始养成算法·篇三:双向链表与双向循环链表

    本文链接:https://www.haomeiwen.com/subject/hinsphtx.html