美文网首页
redis-数据结构-链表

redis-数据结构-链表

作者: TOUCH_d36e | 来源:发表于2017-05-22 17:15 被阅读0次

tips:本文参照《redis设计与实现》、《数据结构与算法》、redis源码

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活调整链表的长度。

因为redis使用C语言并没有内置这种数据结构,所以redis构建了自己的链表实现。

adlist.h/listNode

typedef struct listNode {

//前置节点

struct listNode *prev;

//后置节点

struct listNode *next;

//节点值

void *value;

} listNode;

多个listNode通过prev、next组成双端列表,如下图

虽然仅仅使用多个listNode就可以组成链表,但使用adlist.h/list来持有链表的话,操作起来更方便,尤其是对head与tail操作(实际过程中这两操作非常频繁)

typedef struct list {

//表头节点

listNode *head;

//表尾节点

listNode *tail;

//节点复制函数

void *(*dup)(void *ptr);

//节点释放函数

void (*free)(void *ptr);

//节点值对比函数

int (*match)(void *ptr, void *key);

//节点数量

unsigned long len;

} list;

接下来看下有3个listNode组成的list结构的链表

redis链表实现总结:

1)双端:链表节点都带有prev和next指针,获取某个节点的前置、后置节点的复杂度都是 O(1)

2) 无环,表头节点的prev指针和表尾节点的tail指针都指向null,对链表的访问以null为终点

3)拥有head和tail,通过list结构,程序获取链表的表头节点、表尾节点时间复杂度O(1)

4)带链表长度计数器,程序获取链表的节点数量时间复杂度为O(1)

链表和链表节点的API

相关文章

  • redis-数据结构-链表

    tips:本文参照《redis设计与实现》、《数据结构与算法》、redis源码 链表提供了高效的节点重排能力,以及...

  • Redis-数据结构-SDS、链表

    一、简单动态字符串 SDS(simple dynamic string) 1、redis中使用SDS作为默认字符串...

  • Redis-链表

    Redis-链表 链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活的调整链表的长...

  • Redis-链表

    链表作为一种常用的数据结构,提供了高效的节点重排能力,以及顺序性节点访问方式。并且可以通过增删来灵活的调整链表的长...

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

  • iOS 数据结构之链表

    iOS 数据结构之链表 iOS 数据结构之链表

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

  • Go语言数据结构和算法-LinkedList(链表)

    Go语言数据结构和算法-LinkedList(链表) 节点和链表数据结构 Prepend(item) 在链表头新增...

  • 集合-LinkedList解析

    一、概要 Java中底层数据结构是链表、双端链表,Android中数据结构是双向循环链表 非线程安全数据结构,允许...

  • 常见数据结构和算法

    常见数据结构 线性数据结构(按顺序具有数据元素的数据结构):数组,堆栈,链表(单链表 双链表),队列非线性数据结...

网友评论

      本文标题:redis-数据结构-链表

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