字典的跳表描述

2021-08-21 18:22:14 字數 1342 閱讀 2528

在跳表結構中有一組等級鍊錶,0級鍊錶包含所有數對,一級鍊錶的數對是0級鍊錶數對的乙個子集。i級鍊錶的數對是i-1級鍊錶數對的子集。通過這種方式允許我們能夠對鍊錶進行折半查詢。

對於跳表而言最難的是當插入資料時,該資料到底屬於哪級指標,一般是按照一定的概率隨機分配。

template

struct skipnode

}float cutoff;//用來確定層數

int levels;//當前最大的非空鍊錶

int dsize;//字典的數對個數

int maxlevel;//允許的最大鏈表層數

k tailkey;//最大關鍵字

skipnode* headernode;//頭節點指標

skipnode* tailnode;//尾節點指標

skipnode** last;//表示i層的最後節點

template

skiplist::skiplist(k largekey,int maxpairs,float prob)

template

int skiplist::level() const

template

void skiplist::insert(const pair& thepair)

//若不存在則確定新節點所在的級鍊錶

int thelevel=level();

if(thelevel>levels)

//在節點thenode之前插入新節點

skipnode* newnode=new skipnode(thepair,thelevel+1)//新節點的指標域必須大於當前自身級數

for(int i=0;i<=thelevel;i++)

//以上兩句就是乙個簡單的鍊錶插入語句

dsize++;

return;

}template

pair* skiplist::find(const k& thekey)const

template

skipnode* skiplist::search(const k&thekey)const

return beforenode->next[0];

}template

void skiplist::erase(const k& thekey)

上面**很難理解,但是理解後就是一句話。

每個節點裡面存乙個資料element和乙個二級指標next,next[0]代表0級鍊錶指向下乙個節點,next[1]代表1級鍊錶指向更遠的乙個節點,next[i]指向更更遠的節點,該節點最高有幾級鍊錶,next陣列就有多大。

真的看得頭暈,但還是得堅持啊。

線性表描述字典

template struct pair template struct pairnode pairnode pairthepair,pair p template class dictionary virtual bool empty const 0 virtual int size const ...

跳表的介紹與實現

作用 目的 跳表作為一種資料結構通常用於取代平衡樹。起因平衡樹可以用於表示抽象的資料型別如字典和有序鍊錶,它通過樹旋轉 tree rotation 操作強制使樹結構保持平衡來保證節點搜尋的效率。在資料為隨機插入的情況下,平衡樹效能表現良好 但資料為順序插入或者需要刪除節點的情況下,平衡樹的效能就會有...

跳表的原理及其實現

作用 目的 跳表作為一種資料結構通常用於取代平衡樹。起因平衡樹可以用於表示抽象的資料型別如字典和有序鍊錶,它通過樹旋轉 tree rotation 操作強制使樹結構保持平衡來保證節點搜尋的效率。在資料為隨機插入的情況下,平衡樹效能表現良好 但資料為順序插入或者需要刪除節點的情況下,平衡樹的效能就會有...