鏈表是一種常用的數據結構,提供了順序訪問的方式,而且高效地增刪操作。
Redis中廣泛使用了鏈表,例如:列表的底層實現之一就是鏈表。
在Redis中,鏈表分為兩部分:鏈表信息 + 鏈表節點。
- 鏈表節點用來表示鏈表中的一個節點,基礎的值和指向前和后的指針
- 鏈表信息,用來保存整個鏈表的信息,例如首尾節點、節點數量
先來說鏈表節點,就是我們最常見的鏈表節點的結構:
typeof struct listNode{// 前驅節點struct listNode *prev;// 后繼節點struct listNode *next;// 節點的值void *value;
}listNode;
通過鏈表節點中的prev和next組成雙向鏈表。
而鏈表這個結構體中保存了整個鏈表的信息
typeof struct list{listNode *head; // 表頭節點listNode *tail; // 表尾節點unsigned long len; // 鏈表節點數量// 接下來就是一些鏈表操作的API // 節點復制 ...// 節點釋放 ...// 節點比較 ...
}list;
Redis中的鏈表并沒有什么特殊之處,總結一下特點:
- 雙端操作,鏈表信息list中保存了首尾節點
- 無環,head的prev始終為null,tail的next始終為null
- O(1)獲取鏈表節點數量
- 多態:鏈表節點中通過
void*
來保存節點值,節點值可以是任意類型。
參考文章
- Redis數據結構——鏈表 - 隨心所于 - 博客園
- 《Redis設計與實現》