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示意图如下:

4 redis中linkedlist特性

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值