redis底层数据结构之双向链表(linkedlist)

目录

双向链表(linkedlist)

1 list结构

2 listNode(链表节点)结构

3 linkedlist结构示意图

4 redis中linkedlist特性


双向链表(linkedlist)

redis的双向链表(linkedlist)是基于链表的一种数据结构

链表是一种常见的基础数据结构,是一种非顺序存储数据的线性表,在每一个节点里存储了指向下一个节点的指针

链表充分利用内存实现灵活的内存动态管理,但是失去了数组随机读取的优点,同时链表增加了指向下一节点的指针,空间开销较大

1 list结构

typedef struct list {
     listNode *head;
     listNode *tail;
     unsigned long len;
     void *(*dup) (void *ptr);
     void (*free) (void *ptr);
     int (*match) (void *ptr,void *key);
} list;

其中:

head:表头节点

tail:表尾节点

len:包含的节点数量

(*dup)函数:节点值复制函数

(*free)函数:节点值释放函数

(*match)函数:节点值比较函数,比较值是否相等

2 listNode(链表节点)结构

typedef  struct listNode {
    struct listNode *prev;
    struct listNode *next;
    void *value;  
} listNode;

其中:

prev:前置节点

next:后置节点

value:当前节点的值

3 linkedlist结构示意图

拥有4个节点的linkedlist示意图如下:

redis底层数据结构之双向链表(linkedlist)_第1张图片

4 redis中linkedlist特性

1) 双向: 每个节点都包含前置节点和后置节点的指针

2) 无环: 头节点的prev指针和尾节点的next指针都指向 NULL

3) 常数时间复杂度获取长度:len属性获取链表长度的时间复杂度为O(1)

你可能感兴趣的:(redis,redis,数据结构)