• 链表 -《Redis设计与实现》读书笔记


    使用场景

    1. 当列表键包含数量比较多的元素 或者 列表包含的元素都是比较长的字符串时,使用链表实现列表键
    2. 发布与订阅、慢查询、监视器
    3. 用作缓冲区:构建客户端输出缓冲区
    4. 保存多个客户端的状态信息

    定义

    // 节点
    typedef struct listNode {
        // 前置节点
        struct listNode *prev;
        // 后置节点
        struct listNode *next;
        // 节点的值
        // 由于使用void *指针保存节点值,所有可以保存各种不同类型的值
        void *value;
    } listNode;
    
    // 迭代器
    typedef struct listIter {
        listNode *next;
        int direction;
    } listIter;
    
    // 列表
    // 特点:双端、无环、带表头表尾指针、带链表长度计数器、多态
    typedef struct list {
        // 表头节点
        listNode *head;
        // 表尾节点
        listNode *tail;
        // dup、free、match是用于实现多态链表所需的类型特定函数
        // 节点值复制函数:复制链表节点所保存的值
        void *(*dup)(void *ptr);
        // 节点值释放函数:释放链表节点所保存的值
        void (*free)(void *ptr);
        // 节点值对比函数:对比链表节点所保存的值和另一个输入值是否相等
        int (*match)(void *ptr, void *key);
        // 链表所包含的节点数量
        unsigned long len;
    } list;
    

    源码阅读

    1. 文件:src/adlist.h 、 src/adlist.c
    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    递归获取指定盘符下的所有文件及文件夹
    单例模式和多线程有没有关系?
    eclipse启动tomcat时设置端口
    dozer转化对象
    枚举
    dubbo
    json
    配网失败问题
    esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx);
    base64编码
  • 原文地址:https://www.cnblogs.com/phonecom/p/15071473.html
Copyright © 2020-2023  润新知