3 链表

2018-09-20  本文已影响0人  猪大金

链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活的调整链表的长度。
链表键的底层实现之一就是链表。除了链表之外,发布和订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身使用链表来保存多个客户端的状态信息。

3.1 链表和链表节点的实现

每个链表节点使用adlist.h/listNode结构来表示

typedef struct listNode{
    //前置节点
    struct listNode *prev;
    //后置节点
    struct listNode *next;
    //节点的值
    void *value;
}listNode;

可以看出是一个双向链表
使用多个listNode结构就可以组成链表,但是使用adlist.h/list来持有链表的话,操作起来会更方便。

typedef struct list{
    //表头节点
    listNode *head;
    //表尾节点
    listNode *tail;
    //链表所有包含的节点数量
    unsigned long len;
    //节点值复制函数
    void *(*dup)(void *ptr);
    //节点值释放函数
    void (*free)(void *ptr);
    //节点值对比函数
    void (*match)(void *ptr, void *key);
}list;
上一篇 下一篇

猜你喜欢

热点阅读