// 每個鏈表節點使用一個 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 鏈表實作的特性總結如下:
- 雙端:鏈表節點帶有 prev 和 next 指標,獲取某個節點的前置節點和后置節點
- 無環:表頭節點的prev指標和表尾節點的next指標指向NULL,因此對鏈表的訪問以NULL終止,無環
- 帶有表頭和表尾指標:通過List 的tail 和 head 指標,獲取鏈表的表頭和表尾節點的復雜度為O(1)
- 帶有鏈表長度計數器:通過List 的length屬性,獲取鏈表長度的時間復雜度為O(1)
- 多型:鏈表節點使用 void* 指標來保存節點值,并且可以通過list 結構的 dup 、free、match 三個屬性為節點值設定型別特定函式,所以鏈表可以用于保存各種不同型別的值,
鏈表被用來實作Redis 的各種功能,比如串列鍵、發布與訂閱、慢查詢、監視器等
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/6066.html
標籤:NoSQL
