redis链表

每个链表和链表节点的实现

链表节点结构

typedef struct listNode {
    // 前置节点
    struct listNode *prev;
    // 后置节点
      struct listNode *next;
    // 节点内容
    void *value;
} listNode;

链表结构

typedef struct list {
    // 头节点
    listNode *head;
    // 尾节点
    listNode *tail;
    // 节点数量
    unsigned long len;
    // 节点复制函数
    void* (*dup) (void *ptr);
    // 节点释放函数
    void (*free) (void *ptr);
    // 节点对比函数
    int (*match) (void *prt, void *key);
} list;

dup、free、match成员用于实现多态链表所需的类型特定函数:

  • dup函数用于复制链表节点所保存的值。
  • free函数用于释放节点所保存的值。
  • match函数用户对比链表节点所保存的值和另一个输入值是否相等。

Redis的链表实现特性

  • 双端:链表节点带有prev和next指针,获取前置节点和后置节点的复杂度都是O(1)
  • 无环:头结点的prev和尾节点的next都指向NULL
  • 头节点和尾节点:获取表头和表尾复杂度都是O(1)
  • 多态:链表节点都用void*保存节点值,并且可以通过list结构的dup、free、match三个属性为节点设置类型特定函数,所以链表可以保存不同类型的值。

API

  • listSetDupMethod:将给定的函数设置为链表的节点复制函数,O(1)
  • listGetDupMethod:返回链表正在使用的节点复制函数,O(1)
  • listSetFreeMethod:将给定的函数设置成链表节点的释放函数,O(1)
  • listGetFreeMethod:反馈链表正在使用的节点释放函数,O(1)
  • listSetMatchMethod:将给定的函数设置成链表节点的对比函数,O(1)
  • listGetMatchMethod:反馈链表正在使用的节点对比函数,O(1)
  • listLength:返回链表长度,O(1)
  • listFirst:返回链表头结点,O(1)
  • listLast:返回链表尾节点,O(1)
  • listPrevNode:返回前置节点,O(1)
  • listNextNode:返回后置节点,O(1)
  • listNodeValue:返回节点保存的值,O(1)
  • listCreate:创建一个空链表,O(1)
  • listAddNodeHead:添加节点到链表头,O(1)
  • listAddNodeTail:添加节点到链表尾,O(1)
  • listInsertNode:将新节点添加到给定节点之前或者之后,O(1)
  • listSearchKey:反会链表中包含给定值的节点,O(N)
  • listIndex:返回链表中给定索引的节点,O(N)
  • listDelNode:删除给定节点,O(N)
  • listRotate:弹出尾节点,并弹出,插入到表头,O(1)
  • listDup:复制一个给链表,O(N)
  • listRelease:释放给定链表以及链表中所有节点,O(N)

本文使用 文章同步助手 同步

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 链表作为一种常用的数据结构,提供了高效的节点重排能力,以及顺序性节点访问方式。并且可以通过增删来灵活的调整链表的长...
    binge1024阅读 809评论 0 0
  • 链表 redis数据结构--链表:作为一种常用的数据结构,在这里就不详细介绍了。链表提供了高效的几点重排能力,以及...
    伟大的华仔阅读 146评论 0 1
  • Redis-链表 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活的调整链表的长...
    gaobinzhan阅读 305评论 0 0
  • 链表的实现方式有很多种,常见的主要有三个,单向链表、双向链表、循环链表。 1、单链表 结构:第一个部分保存或者显示...
    多多的大白阅读 946评论 0 0
  • 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵魂的调整链表长度。 链表和链表节点...
    我要尝鲜阅读 402评论 0 1

友情链接更多精彩内容