定義
每個鍊錶節點使用乙個 adlist.h/listnode 結構來表示:
typedef struct listnode listnode;
adlist.h/list 列表結構:
typedef struct list list;
特性:
redis 的鍊錶實現的特性可以總結如下:
雙端: 鍊錶節點帶有 prev 和 next 指標, 獲取某個節點的前置節點和後置節點的複雜度都是 o(1) 。
無環: 表頭節點的 prev 指標和表尾節點的 next 指標都指向 null , 對鍊錶的訪問以 null 為終點。
帶表頭指標和表尾指標: 通過 list 結構的 head 指標和 tail 指標, 程式獲取鍊錶的表頭節點和表尾節點的複雜度為 o(1) 。
帶鍊錶長度計數器: 程式使用 list 結構的 len 屬性來對 list 持有的鍊錶節點進行計數, 程式獲取鍊錶中節點數量的複雜度為 o(1) 。
多型: 鍊錶節點使用 void* 指標來儲存節點值, 並且可以通過 list 結構的 dup 、 free 、 match 三個屬性為節點值設定型別特定函式, 所以鍊錶可以用於儲存各種不同型別的值。
總結
Redis 鍊錶和鍊錶節點
每個鍊錶節點使用乙個 adlist.h listnode 結構來表示 typedef struct listnode listnode 多個 listnode 可以通過 prev 和 next 指標組成雙向鍊錶。使用 adlist.h list 來持有鍊錶,操作起來會更方便 typedef stru...
Redis之鍊錶
鍊錶在redis中的應用非常廣泛,列表鍵的底層實現之一就是鍊錶,發布與訂閱 慢查詢 監視器等功能也用到了鍊錶,redis伺服器本身使用鍊錶來儲存多個客戶端的狀態資訊,以及使用鍊錶來構建客戶端輸出緩衝區。鍊錶的實現原始碼 鍊錶節點 typedef struct listnode listnode 鍊錶...
redis雙向鍊錶
大年初三,在家無所事事,腦袋格外清醒,就來磕會原始碼,暈了就可以睡覺啦。哈哈哈,催眠一絕。今天看的是資料結構為list型別的底層實現,怕偶以後忘記了,特地重新擼一遍。127.0.0.1 6379 lpush list a b c 依次在鍊錶頭部插入a b c integer 3 127.0.0.1 ...