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
    只言片语任我说,提笔句句无需忖。落笔不知寄何人,唯有邀友共斟酌。
  • 相关阅读:
    ThinkPHP Ajax 使用详解及实例
    thinkphp中常用的系统常量和系统变量
    JavaScript使用thinkPHP模板标签
    正则表达式替换连续空格
    javascript关联数组
    javascript关联数组的用法
    javascript之数组操作
    CentOS7_开放指定端口
    centos7磁盘基本信息
    SpringBoot thymeleaf——修改后如何实时生效
  • 原文地址:https://www.cnblogs.com/phonecom/p/15071473.html
Copyright © 2011-2022 走看看