跳表是一種有序的資料結構,它通過在每個節中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。
跳躍表支援平均(logn)最壞o(n)時間複雜度的查詢。
跳躍表作為有序集合鍵的底層實現之一。
redis兩個地方用到了跳躍表:乙個是實現有序集合鍵、另外乙個是在集群節點中用作內部資料結構,除此之外沒有其他用處了。
redis.h/zksiplistnode
和redis.h/zskiplist
兩個結構定義。
位於skiplist
右方是4個skiplistnode
節點,每層是代表層數,右指標右邊跨越數。bw 指向位於當前節點的前乙個節點用於從後往前遍歷時使用。
1、層 扔硬幣法則 冪次定律 只有在1-32之間,所以level[0]
就是第一層如此類推。
2、前進指標 每個層都有乙個指向表尾方向的前進指標,用於從表頭向表尾方向訪問節點。
3、跨度 兩個節點之間跨度越大 他們距離得越遠。
指向null的所有前進指標跨度都為0,因為他們沒有連向任何及誒單。
4、後退指標
查詢就是與下乙個比較,如果比它大就繼續向右 如果比它小就向下一層。
跳表和平衡樹的比較:
範圍查詢、簡單、記憶體少、不複雜。跳表就是
redis資料結構分析
Redis設計與實現 筆記 第五章 跳躍表
跳躍表是一種有序的資料結構,通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的.跳躍表支援平均 o logn 最壞 o n 的複雜度節點查詢,還可以通過順序性操作批量節點.節點整體效率接近紅黑樹,且 複雜度低於紅黑樹.跳表的實現思路也類似於紅黑樹,區別於紅黑樹通過大於小於等於某乙...
第五章 跳躍表
跳躍表 skiplist 是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的指標,從而達到快速訪問節點的目的。支援平均o logn 最壞o n 複雜度的節點查詢,還可以通過順序性操作來批量處理節點。redis只在兩個地方用到了跳躍表,乙個是實現有序集合鍵,另乙個是在集群節點中用作內部資料結...
第五章 跳躍表
跳躍表 在每個節點維持多個指向其他節點的指標,達到快速訪問節點的目的。redis使用跳躍表作為有序集合鍵的底層實現之一。zskiplist結構 zskiplistnode結構 5.1.1 跳躍表節點 type struct zskiplistnode level zskiplistnode 1.層跳...