# 结构

lsit

# 用处

  • List 对象
  • 发布与订阅
  • 慢查询
  • 监视器
  • 客户端状态信息
  • 客户端输出缓冲区

# 定义

typedef struct listNode {
    // 前置节点
    struct listNode *pre;
    // 后置节点
    struct listNode *next;
    // 节点的值
    void *value;
} listNode;
typedef struct list {
    // 表头节点
    listNode *head;
    // 表尾节点
    listNode *tail;
    // 链表包含的节点数量
    unsigned long len;
    // 节点值复制函数
    void *(*dup)(void *ptr);
    // 节点值释放函数
    void (*free)(void *ptr);
    // 节点值对比函数
    int (*match)(void *ptr, void *key);
} list;

# 特点

  • 双端,获取某个节点前置和后置节点的复杂度为 O (1)
  • 无环,头节点的 pre 和尾节点的 next 指针都是 null
  • 带表头指针和表尾指针,获取链表中头节点和尾结点的复杂度为 O (1)
  • 带列表长度计数器,获取链表长度的复杂度为 O (1)
  • 多态,void* 指针保存节点信息,dup、free、match 设置对应函数