1. 程式人生 > 其它 >連結串列 -《Redis設計與實現》讀書筆記

連結串列 -《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
隻言片語任我說,提筆句句無需忖。落筆不知寄何人,唯有邀友共斟酌。