美文网首页
链表和链表节点的实现

链表和链表节点的实现

作者: 阳光课代表 | 来源:发表于2019-08-06 14:42 被阅读0次

数据结构

struct listNode {
    struct listNode *prev; // 前置节点
    struct listNode *next; // 后置节点
    void *value; // 节点的值
};

多个 listNode 可以通过 prev 和 next 指针组成双端链表, 如图 3-1 所示:


图 3-1

虽然仅仅使用多个 listNode 结构就可以组成链表, 但使用 list 来持有链表的话, 操作起来会更方便:

struct list {
    listNode *head; // 表头节点
    listNode *tail; // 表尾节点
    unsigned long len; // 链表所包含的节点数量
};

图 3-2 是由一个 list 结构和三个 listNode 结构组成的链表:


图 3-2

Redis 的链表实现的特性可以总结如下:

  • 双端: 链表节点带有 prev 和 next 指针, 获取某个节点的前置节点和后置节点的复杂度都是 O(1)
  • 无环: 表头节点的 prev 指针和表尾节点的 next 指针都指向 NULL , 对链表的访问以 NULL 为终点
  • 带表头指针和表尾指针: 通过 list 结构的 head 指针和 tail 指针, 程序获取链表的表头节点和表尾节点的复杂度为 O(1)
  • 带链表长度计数器: 程序使用 list 结构的 len 属性来对 list 持有的链表节点进行计数, 程序获取链表中节点数量的复杂度为 O(1)

相关文章

  • Redis数据结构学习-链表(二)

    链表 链表提供了高效的节点重排能力, 及顺序性节点访问方式, Redis构建了自己的链表实现 链表和链表节点的实现...

  • 3.链表

    链表 1. 链表和链表节点的实现 每个链表节点使用一个adlist.h/listNode结构来表示 使用adlis...

  • 2.链表

    一、链表和链表节点的实现 每个链表节点使用一个adlist.h/listNode结构表示: 多个listNode可...

  • 数据结构与算法之链表面试题(四)

    目录 删除链表中的节点反转一个链表递归实现迭代(非递归)实现 一 删除链表中的节点 237. 删除链表中的节点 说...

  • java实现链表

    设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val和next。val是当前节点的...

  • JavaScript数据结构与算法-链表练习

    链表的实现 一. 单向链表 二. 双向链表 三. 循环链表 练习 一. 实现advance(n)方法,使当前节点向...

  • 链表相关

    总结一下链表相关的操作 单链表节点的定义 实现单向链表的反向 删除单链表的所有节点

  • python 循环单向链表

    单向循环链表python实现 循环链表实现 头节点添加 尾节点添加 插入 删除 查找

  • 单向循环链表及C#的实现

    循环链表 循环链表是指链表的尾节点的Next指针域指向头节点。循环链表判空条件,头节点的后继指向自己。 代码实现 ...

  • 链表基本操作

    1、删除单链表节点 2、插入单链表结点 单链表具体实现

网友评论

      本文标题:链表和链表节点的实现

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