資料結構之雜湊表之跳表

2021-10-19 08:14:50 字數 2201 閱讀 1937

跳表結構如下:

那麼我們來寫它需要的結構體以及所需函式:先是資料型別的結構體:

struct datatype 

;

這裡跟陣列雜湊是一樣的,乙個是需要取餘的鍵值,乙個是存放的資料

既然是鍊錶結構,那麼該有的鍊錶節點我們得寫一下,這個看我的資料結構專欄的帥哥都很熟悉,或者經常寫鍊錶的靚仔都很熟悉,所以直接上了:

struct node 

;struct node*

createnode

(struct datatype* data)

那麼我們剛才看了跳表的基本結構,我們抽象出來跳表的基本單元也就是第一列節點的情況:

然後我們把基礎單元封裝成結構體,並寫出它的建立的函式:

struct skiplistnode 

;struct skiplistnode*

createskiplistnode

(struct datatype* data)

接下來是抽象一下跳表結構,也就是若干個跳表節點和自己的大小:

struct skiplist 

;//建立乙個跳表:

struct skiplist*

createskiplist

(int div)

//這個函式也就是找到合適的位置插入

void

insertnodebysort

(struct skiplist* list,

struct datatype* data)

else

else}if

(pmove !=

null

&&(pmove->data->first % list->div)

== datahashpos)

else

else}if

(ppmove ==

null

)else}}

}else}}

}

好了,插入元素,我們完成了,那麼這個資料結構其實已經完成了,接下來是驗證我們做的對不對:

乙個列印函式:

豎向列印,橫向有衝突的在後面插入的,要做判斷,如果有橫向走到null結束,列印

void

printlist

(struct skiplist* list)

printf

("\n");

//每次橫向列印完畢轉行一下,方便我們看結果

pmove = pmove->next;

//記得移動指標

}printf

("\n");

}

主函式:

int

main()

;for

(int i =

0; i <

7; i++

)printlist

(list)

;struct datatype a =

;//檢驗直接表頭的情況

insertnodebysort

(list,

&a);

printlist

(list)

;return0;

}

好了到這,我們的跳表結構已經寫完了。

但在這最後這裡,我想補充的是其實每一列豎向都是可以連通的,如圖:

這樣的結構的的確確存在著,有興趣的小夥伴其實可以實現一下這樣的結構。

再看一下,如果我們以頭節點作為中心,順時針旋轉45度,有沒有發現啥?

對,這是個極不平衡的二叉樹!

看***的圖

好了,這樣就是我在這裡總結的全部了。

資料結構之跳表

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

資料結構之雜湊表(雜湊表)

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...

資料結構之雜湊表

雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用 冪的連乘 的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3 27 3 1 27 2 2...