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

这篇具有很好参考价值的文章主要介绍了【数据结构】线性表 ⑤ ( 双循环链表 | 双循环链表特点 | 双循环链表插入操作处理 | 代码示例 - 使用 Java 实现 双循环链表 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。





一、双循环链表



" 双循环链表 "在 单循环链表 的基础上 , 在每个 节点 中 , 新增一个 指针 , 指向 该节点 的 前驱节点 ;

双向循环链表 每个 节点 都包含 数据 和 两个指针 ,

一个指针指向前一个节点 , 一个指针指向后一个节点 ;

与 单循环链表相比 , 双循环链表 可以在两个方向上遍历整个链表 , 单循环链表 只能在一个方向上遍历链表 ;





二、双循环链表特点



双循环链表 特点 :

  • 闭环结构 :
    • 第一个节点前驱指针 指向最后一个节点 ;
    • 最后一个节点后继指针 指向第一个节点 ;
  • 遍历方向 : 双循环链表 可以从头部节点 向前遍历 , 也可以向后遍历 ;
  • 高效增删节点 : 双循环链表 中 , 可以在 任意位置 增删节点 , 双循环链表中可以双向遍历 , 增删节点 效率更高 ;

LRU 缓存算法中 , 一般使用 双循环链表 数据结构 ;





三、双循环链表插入操作处理



双循环链表 中 , 需要对 插入 / 删除 / 遍历 操作 进行特殊处理 , 因为需要调节 前驱指针 和 后继指针 两个指针 ;

如 : 双循环链表 中 , 如果要插入元素 , 将 c 节点 插入到 a 节点 和 b 节点 之间 ,

当前的状态是 a 的后继指针 指向 b , b 的前驱指针指向 a ;

如果要实现插入 c 元素 , 则需要

  • 将 a 的 后继指针 指向 c ,
  • 将 c 的 前驱指针 指向 a ,
  • 将 c 的 后继指针 指向 b ,
  • 将 b 的 前驱指针 指向 c ;

插入节点操作 需要执行四个步骤 :

  • ① 将 c 的 前驱指针 指向 a
  • ② 将 a 的 后继指针 指向 c
  • ③ 将 c 的 后继指针 指向 b
  • ④ 将 b 的 前驱指针 指向 c
    双向循环链表的特点,数据结构,数据结构,链表,java,双循环链表,线性表,原力计划




四、代码示例 - 使用 Java 实现 双循环链表



Node类来表示双向循环链表的节点 , 每个节点包含如下要素 :

  • 数据项 data ;
  • 指向 前一个节点 的 前驱指针 prev ;
  • 指向 下一个节点 的 后继指针 next ;

使用 Java 实现 双循环链表 :文章来源地址https://www.toymoban.com/news/detail-647198.html

public class Node {
    public int data;
    public Node prev;
    public Node next;

    public Node(int data) {
        this.data = data;
        this.prev = null;
        this.next = null;
    }
}

public class DoublyCircularLinkedList {
    private Node head;

    public DoublyCircularLinkedList() {
        this.head = null;
    }

    public void append(int data) {
        Node newNode = new Node(data);

        if (head == null) {
            head = newNode;
            head.next = head;
            head.prev = head;
        } else {
            Node lastNode = head.prev;

            lastNode.next = newNode;
            newNode.prev = lastNode;
            newNode.next = head;
            head.prev = newNode;
        }
    }

    public void printList() {
        if (head == null) {
            System.out.println("Doubly Circular Linked List is empty.");
            return;
        }

        Node current = head;
        do {
            System.out.print(current.data + " ");
            current = current.next;
        } while (current != head);
    }

    public static void main(String[] args) {
        DoublyCircularLinkedList dcll = new DoublyCircularLinkedList();
        dcll.append(1);
        dcll.append(2);
        dcll.append(3);
        dcll.append(4);

        dcll.printList();
    }
}

到了这里,关于【数据结构】线性表 ⑤ ( 双循环链表 | 双循环链表特点 | 双循环链表插入操作处理 | 代码示例 - 使用 Java 实现 双循环链表 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构01-线性结构-链表栈队列-栈篇

    线性结构-栈 本系列为C++数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 线性结构 【 3 】链表:单链表、双向链表、循环链表 【 3 】栈 【 3 】队列 栈是Stack一个后进先出Last In First Out,LIFO的线性表,他要求只在表尾对数据执行删除和插

    2024年02月16日
    浏览(28)
  • 【数据结构】线性表之链表

    上一篇文章讲述了线性表中的顺序表,这篇文章讲述关于链表的定义、类别、实现、多种不同链表的优缺点和链表与顺序表的优缺点。 关于上一篇文章的链接:线性表之顺序表 链表是一种物理存储结构上 非连续、非顺序 的存储结构,数据元素的逻辑顺序是通过链表中的指针

    2024年02月05日
    浏览(42)
  • 数据结构01-线性结构-链表栈队列-队列篇

    本系列为C++数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 线性结构 【 3 】链表:单链表、双向链表、循环链表 【 3 】栈 【 3 】队列 队列(Queue)与栈一样,是一种线性存储结构,它具有如下特点: (1)队列中的数据元素遵循“先进

    2024年02月16日
    浏览(27)
  • 数据结构(二)----线性表(顺序表,链表)

    目录 1.线性表的概念 2.线性表的基本操作 3.存储线性表的方式 (1)顺序表 •顺序表的概念 •顺序表的实现 静态分配: 动态分配: 顺序表的插入: 顺序表的删除: 顺序表的按位查找: 顺序表的按值查找: 顺序表的特点: (2)单链表 •单链表的实现 不带头结点的单链表

    2024年04月16日
    浏览(43)
  • 数据结构(王道)——线性表的存储结构之循环表

      创建并初始化、判断循环单链表是否为空、判断结点p是否为循环单链表的表尾结点的代码操作。           创建并初始化、判断循环双链表是否为空、判断结点p是否为循环双链表的表尾结点的代码操作。     普通双链表用以下代码实现插入的时候,如果插入的结点是最后

    2024年02月16日
    浏览(27)
  • 数据结构《链表》无头单向非循环-动图详解

    前面学习了顺序表发现,顺序表虽然好,但也有很多不足的地方,比方说,顺序表是一块连续的物理空间,如果头插或者头删,那么整个数组的数据都要移动。但是链表不一样,链表是通过指针访问或者调整,链表是物理空间是不连续的,通过当前的next指针找到下一个。 插

    2024年02月06日
    浏览(35)
  • 数据结构:线性表之-单向链表(无头)

    目录 什么是单向链表 顺序表和链表的区别和联系 顺序表: 链表: 链表表示(单项)和实现 1.1 链表的概念及结构 1.2单链表(无头)的实现 所用文件 将有以下功能: 链表定义 创建新链表元素 尾插 头插 尾删 头删 查找-给一个节点的指针 改 pos位置之前插入 删除pos位置的值 成品

    2024年02月09日
    浏览(48)
  • 【数据结构】C语言实现双向链表(带头结点、循环)

    结点定义: 接口定义: 我们将申请结点的代码封装成函数,方便后续使用 由于是带头结点的双向链表,因此在使用链表前,我们需要对链表进行初始化。 遍历链表,值得说的是,带头结点的双向链表的循环结束条件是 cur != phead 尾插时,需要先找到尾结点,然后将新结点插

    2024年02月03日
    浏览(56)
  • 5分钟学会数据结构中的线性链表

    除了一些算法之外,我们还要掌握一些常见的数据结构,比如 数组、链表、栈、队列、树等结构。 在之前的文章中,已经带着大家学习了Java里的一维数组和多维数组,所以对此我就不再细述了。 接下来我会给大家讲解一下线性结构中的链表,希望你能喜欢哦。 全文大约【

    2024年02月08日
    浏览(41)
  • 【数据结构篇】线性表1 --- 顺序表、链表 (万字详解!!)

    目录  顺序表(ArrayList) 什么是顺序表?  代码实现 (MyArrayList) --- 打印顺序表  --- 新增元素  1.新增元素,默认在数组最后新增 2.在指定位置新增元素  --- 判断是否包含某个元素 --- 查找某个元素具体位置(下标) --- 获取 pos 位置的元素 --- 给pos位置 的值设为 value  -

    2024年02月10日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包