資料結構 跳表(Skip List)

2021-10-02 12:02:40 字數 2031 閱讀 6680

從頂層鍊錶的首元素開始,從左往右搜尋,知道找到乙個大於或等於目標的元素,或者到達當前層鍊錶的尾部

如果該元素等於目標元素,則表明該元素已被找到

如果該元素大於目標元素或已到達鍊錶的尾部,則退回到當前層的前乙個元素,然後轉入下一層進行搜尋

}// 新節點的層數

int newlevel =

randomlevel()

;// 新增新節點

node

newnode =

newnode

<

>

(key, value, newlevel)

;// 設定前驅和後繼

for(

int i =

0; i < newlevel; i++

)else

}// 節點數量增加

size++

;// 計算跳表的最終層數

level = math.

max(level, newlevel)

;return null;

}public v remove

(k key)

prevs[i]

= node;

if(cmp ==

0) exist =

true;}

if(!exist)

return null;

// 需要被刪除的節點

node

removednode = node.nexts[0]

;// 數量減少

size--

;// 設定後繼

for(

int i =

0; i < removednode.nexts.length; i++

)// 更新跳表的層數

int newlevel = level;

while

(--newlevel >=

0&& first.nexts[newlevel]

== null)

return removednode.value;

}private

intrandomlevel()

return level;

}private

void

keycheck

(k key)

}private

intcompare

(k k1, k k2)

private

static

class

node

@override

public string tostring()

}@override

public string tostring()

sb.("\n");

}return sb.

tostring();}}

跳表skiplist相關

基於字典的跳表實現 include include include include include using namespace std template struct skipnode template class dictionary virtual bool empty const 0 vi...

手搓跳表 SkipList

public class skiplist 查詢資料 param data return public node search int data return res 通過data來查詢節點 param data return private node findnode int data if cu...

資料結構之跳表

字典有一些形如 字典的節點 鍊錶節點定義 template struct pairnode pairnode const pair element element element pairnode const pair element,pairnode next element element 字典...