zoukankan      html  css  js  c++  java
  • 链表 -《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
    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    C#实现RSA加密与解密、签名与认证
    RSA公钥加密,私钥解密的程序示例
    C#中自定义属性的例子
    HTTPS简单原理介绍
    深入浅出HTTPS基本原理
    WebClient请求帮助类
    WebApi安全性 使用TOKEN+签名验证
    jsvascript === 和==的区别
    UML中的图的出现顺序
    UML从需求到实现----用例
  • 原文地址:https://www.cnblogs.com/phonecom/p/15071473.html
Copyright © 2011-2022 走看看