前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题47:Redis中list双向链表

面试题47:Redis中list双向链表

作者头像
爪哇缪斯
发布2023-05-09 21:44:08
1980
发布2023-05-09 21:44:08
举报
文章被收录于专栏:爪哇缪斯
  • 链表的特点是高效的删除新增节点来灵活的调整链表中的元素顺序。

  • 由于C语言没有内置链表,所以Redis自己构建了链表的实现。
  • Redis基本数据结构中的REDIS_LIST,底层的实现之一就采用的链表。即:当包含了很多元素,或者元素中有比较长的字符串时,就会采用链表作为REDIS_LIST的底层实现。
  • 源码个注释如下所示:
代码语言:javascript
复制
adlist.h
/*
 * 双向链表节点
 */
typedef struct listNode {
    // 前节点
    struct listNode *prev;
    // 后节点
    struct listNode *next;
    // 本节点的值
    void *value;
} listNode;
代码语言:javascript
复制
adlist.h
/*
 * 双向链表
 */
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;
  • 数据结构如下:
  • 特征如下:
    • 双端:具有prev和next指针,获取某个节点的前置/后置节点的复杂度为O(1)。
    • 无环:头节点的prev=NULL,尾节点的next=NULL,对链表的访问以NULL为终点。
    • 带表头/表尾指针:list结构中包含head指针和tail指针,所以获得链表头节点/尾节点的复杂度为O(1)。
    • 多态性:可以通过设置dup、free、match这三个不同类型特定函数,保存各种不同类型的节点值。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档