typedef struct skiplistnode_structskiplistnode;
data用於存放指向實際資料的指標
forward為乙個指標陣列,forward[i]中的i值對應跳躍表中的一層,如果本skiplistnode在這一層中存在就指向下乙個skiplistnode,不存在的話為null
typedef struct skiplist_structskiplist;
current_level用於存放目前跳躍表有多少層
max_levels用於存放跳躍表最高會有多少層
level_probability用於存放隨機決策的值,nagios使用了0.5
items用於存放跳躍表中有多少個元素
allow_duplicates設定是否允許有重複的元素
compare_functions用於比較跳躍表中兩個元素的大小,用於跳躍表中元素的排序
head指向跳躍表中的頭元素
用於生成乙個新的skiplist
skiplistnode *skiplist_new_node(skiplist *list,int node_levels);
用於生成乙個新的skiplistnode
int skiplist_insert(skiplist *list, void *data);
插入乙個節點
int skiplist_random_level(skiplist *list);
返回隨機生成的level值
int skiplist_empty(skiplist *list);
除了skiplist結構和頭元素,其餘的元素全部free掉
int skiplist_free(skiplist **list);
將skiplist中的所有東西都free掉
void *skiplist_peek(skiplist *);
返回除頭元素外的第乙個元素當中的data指標
void *skiplist_pop(skiplist *);
返回除頭元素外的第乙個元素的指標,並從skiplist當中刪除該元素
void *skiplist_get_first(skiplist *list, void **node_ptr);
得到除頭元素外第乙個元素的指標
void *skiplist_get_next(void **node_ptr);
得到**node_prt指向元素的下乙個元素的指標
void *skiplist_find_first(skiplist *list, void *data, void **node_ptr);
查詢第乙個與data相等的元素,並返回指向該元素的指標,如果沒有找到返回null
void *skiplist_find_next(skiplist *list, void *data, void **node_ptr);
從*node_ptr指向的元素開始查詢下乙個與data相等的元素,如果沒有找到返回null
int skiplist_delete(skiplist *list, void *data);
直接呼叫skiplist_delete_all函式
int skiplist_delete_first(skiplist *list, void *data);
刪除查詢到的第乙個與data相等的元素
int skiplist_delete_all(skiplist *list, void *data);
不斷的呼叫skiplist_delete_first函式來刪除data相等的資料
int skiplist_delete_node(skiplist *list, void *node_ptr);
刪掉skiplist當中node_ptr指向的元素
Redis的跳躍表
typedef struct zskiplistnode level 層 層高1 32隨機,一般層數量越多,訪問其他節點速度越快 struct zskiplistnode backward 後退指標 只能退至前乙個節點 double score 分值 所有節點按分值從小到大排序 robj obj 成...
跳躍表是什麼
加入我們要開發乙個遊戲裡面類似拍賣行的搜尋功能,我們要支援輸入道具名稱的精準查詢和不輸入名稱的全量查詢.拍賣行商品數量幾十萬件,對應資料庫商品表的幾十萬條記錄,按照商品名稱精準查詢好辦,可以直接衝資料庫查出來,如果沒有商品名稱的全量查詢怎麼辦?總不能把資料庫所有記錄查出來,還要支援不同欄位的排序.拍...
四 跳躍表(Redis)
跳躍表 skiplist 是一種有序資料結構,它通過在每個節點中維持多個指向其他節點的 指標,從而達到快速訪問節點的目的。redis 的跳躍表由 redis.h zskiplistnode 和 redis.h zskiplist 兩個結構定 義,其中zskiplistnode結構用於表示跳躍表節點,...