redis数据结构实现--链表(list)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: redis数据结构实现(二) 2.链表和链表节点的实现 *每个链表节点由一个listNode实现typeof struct listNode{ //前置节点 struct listNode *prev; //前置节点 struct l.

redis数据结构实现--链表(list)

2.链表和链表节点的实现


每个链表节点由一个listNode实现

typeof struct listNode{

    //前置节点
    
    struct listNode *prev;
    
    //前置节点
    
    struct listNode *next;
    
    //值
    
    void *value;
    
}listNode;

用list来持有链表

typeof struct list{

    //表头节点
    
    listNode *head;
    
    //表尾节点
    
    listNode *tail;
    
    //链表长度
    
    unsigned long len;
    
    //节点值复制函数
    
    void *(*dup)(void *ptr);
    
    //节点值释放函数
    
    void (*free)(void *ptr)
    
    //节点值对比函数
    
    int (*match)(void *ptr,void *key)
    
}

redis链表的实现特性总结如下:

  • 双端:链表节点带有prev和next指针
  • 无环:表头节点的prev指针和表尾节点的next指针都指向null,访问链表以null为终点
  • list中带头指针和表尾指针:通过list结构中的head和tail指针访问表头尾节点时间复杂度为O(1)
  • 链表长度计数器:list结构中有len属性来记录链表长度,获取链表长度时间复杂度为O(1)
  • 链表节点void* 指针来保存节点值,可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种不同类型的值。
目录
相关文章
|
17天前
|
消息中间件 缓存 NoSQL
Redis各类数据结构详细介绍及其在Go语言Gin框架下实践应用
这只是利用Go语言和Gin框架与Redis交互最基础部分展示;根据具体业务需求可能需要更复杂查询、事务处理或订阅发布功能实现更多高级特性应用场景。
144 86
|
17天前
|
存储 缓存 NoSQL
Redis基础命令与数据结构概览
Redis是一个功能强大的键值存储系统,提供了丰富的数据结构以及相应的操作命令来满足现代应用程序对于高速读写和灵活数据处理的需求。通过掌握这些基础命令,开发者能够高效地对Redis进行操作,实现数据存储和管理的高性能方案。
57 12
|
16天前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
100 0
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
131 2
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
167 1
[leetcode 链表] 反转链表 vs 链表相交
[leetcode 链表] 反转链表 vs 链表相交
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表