Redis 鏈表實現

// 每一個鏈表節點使用一個 ListNode 結構來表示
typedef struct ListNode{ //前置節點 struct ListNode *prev; //後置節點 struct ListNode *next; //節點值 void *value; } ListNode;

  

// 
typedef struct List{
    //頭節點
    struct ListNode *head;
//尾節點 struct ListNode *tail;
//鏈表所包含的節點數量 unsigned long length;

  //節點值複製函數
  void *(*dup) (void *ptr);
  //節點值釋放函數
  void *(*free) (void *ptr);
  //節點值對比函數
  void (*match) (void *ptr, void *key);
} List;

  Redis 鏈表實現的特性總結以下:函數

  1. 雙端:鏈表節點帶有 prev 和 next 指針,獲取某個節點的前置節點和後置節點
  2. 無環:表頭節點的prev指針和表尾節點的next指針指向NULL,所以對鏈表的訪問以NULL終止,無環
  3. 帶有表頭和表尾指針:經過List 的tail 和 head 指針,獲取鏈表的表頭和表尾節點的複雜度爲O(1)
  4. 帶有鏈表長度計數器:經過List 的length屬性,獲取鏈表長度的時間複雜度爲O(1)
  5. 多態:鏈表節點使用 void* 指針來保存節點值,而且能夠經過list 結構的 dup 、free、match 三個屬性爲節點值設置類型特定函數,因此鏈表能夠用於保存各類不一樣類型的值。

鏈表被用來實現Redis 的各類功能,好比列表鍵、發佈與訂閱、慢查詢、監視器等指針

相關文章
相關標籤/搜索