Redis数据类型——链表

链表和节点的实现

节点由三部分组成,分别是指向前一个结点的指针和指向后一个节点的指针加上节点存储的值value。

链表的组成是由节点listNode组成的,并且使用的是 adlist.h/list 来操作链表

list的结构有如下:

 

listNode * head; //链表的头节点

listNode * tall; //链表的尾节点

unsigned long len; //链表节点的个数

void *(*dup)(void *ptr); //节点值复制函数

void (*free) (void *ptr);//节点释放函数

int (*match) (void *ptr,void *key); //节点值对比函数

 

dup 函数用于复制链表节点所保存的值

free 函数用于释放链表节点所保存的值

match 函数用于对比链表节点和另一个值是否相等

Redis的链表实现特性

  1. 双端,每个节点都有prev和next两个指针,所以寻找某个节点的前后值都是O(1)
  2. 无环,头节点的prev和尾节点的next都指向NULL,所以不构成环
  3. 有头指针和尾指针
  4. 有记录链表长度的属性len,获取链表长度的时间复杂的为0(1)
  5. 多态,链表节点使用void* 指针来保存节点值,还可以用dup 、 match 、free函数来设置类型特定函数,所以链表可以保存不同类型的值

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值