redis雙向鍊錶

2021-09-10 15:12:09 字數 866 閱讀 3346

大年初三,在家無所事事,腦袋格外清醒,就來磕會原始碼,暈了就可以睡覺啦。

哈哈哈,催眠一絕。

今天看的是資料結構為list型別的底層實現,怕偶以後忘記了,特地重新擼一遍。

127.0.0.1:6379> lpush list a b c //依次在鍊錶頭部插入a、b、c 

(integer) 3

127.0.0.1:6379> rpush list d e f //依次在鍊錶尾部插入d、e、f

(integer) 6

127.0.0.1:6379> lrange list 0 -1 //檢視list的值

1) "c"

2) "b"

3) "a"

4) "d"

5) "e"

6) "f"

每個節點都是乙個listnode,擁有前驅節點,後繼節點和值。這就是c語言中的雙向鍊錶。

typedef struct listnode  listnode;
只要有多個節點就可以組成乙個鍊錶了,但是redis再在外面封裝了一層,也就是使用adlist.h/list來實現,這樣操作起來更加方便。

typedef struct list  list;
比如上面的list,實際的示意圖如下:

這個超簡單的,偶就不多寫啦(其實是因為寫的困了,睡覺覺去啦)。

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...

雙向鍊錶(鍊錶)

雙向鍊錶 每個節點包含指向後繼節點的指標和指向前驅節點的指標。繼承關係圖 實體圖 duallinklist.h duallinklist 雙向鍊錶類模板 成員變數 node 節點實體 m header 頭節點 m length 鍊錶長度 m step 步進長度 m current 當前節點前乙個節點...

雙向鍊錶 3 反轉雙向鍊錶

雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...