連結串列 -《Redis設計與實現》讀書筆記
阿新 • • 發佈:2021-07-28
使用場景
- 當列表鍵包含數量比較多的元素 或者 列表包含的元素都是比較長的字串時,使用連結串列實現列表鍵
- 釋出與訂閱、慢查詢、監視器
- 用作緩衝區:構建客戶端輸出緩衝區
- 儲存多個客戶端的狀態資訊
定義
// 節點 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;
原始碼閱讀
- 檔案:src/adlist.h 、 src/adlist.c