[redis] 數據結構 -- 鏈表

linkedlist

  1. 結構
typedef struct listNode {
    struct listNode *prev; // 前置節點
    struct listNode *next; // 後置節點
    void *value;                    // 節點值,指向 robj 對象,而 robj 對象中的 ptr 指向實際的 SDS 對象
} listNode;

typedef struct list {
    listNode *head;                                      // 表頭節點
    listNode *tail;										  // 表尾節點
    void *(*dup)(void *ptr);					  // 節點值複製函數
    void (*free)(void *ptr);                        // 節點值釋放函數
    int (*match)(void *ptr, void *key); // 節點值對比函數
    unsigned long len;								  // 鏈表所包含的節點數量
} list;
  1. 每個鏈表節點由一個 listNode 結構來表示,每個節點都有一個指向前置節點和後置節點的指針( Redis 的鏈表實現是雙向鏈表)
  2. 每個鏈表使用一個 list 結構表示,這個結構帶有表頭節點指針、表尾節點指針以及鏈表長度信息( 獲取鏈表長度的時間複雜度爲 O(1) )
  3. linkedlist 在插入、刪除元素時,元素數量、單個元素的長度對耗時影響小(耗時分佈比較集中),但是空間利用率比較差,特別是數據規模較小時,空間利用率非常差
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章