資料結構之好玩好難的hash table

2021-09-02 10:31:19 字數 2151 閱讀 8772

貌似每次寫部落格之前就得先說說自己又多久多久沒有寫過部落格了,這次的部落格距上次的已經過了快一年了,確實自制力不夠,懶癌加拖延症患者傷不起。

咳咳,接下來進入正題:資料結構已經很讓人頭疼了,不過更讓人頭疼的還有hash。那麼什麼是hash?

全稱:hash table

簡寫:ht

中文名:雜湊表

結構:hash table中的乙個位置叫做乙個槽(怎麼就感覺像是個坑),注意了:乙個槽裡只能放乙個資料,槽的數量姑且用m表示,則乙個hash table中就有用0—m-1編號的m個槽(不同hash table的結構不同,其中有一種就是在這個名為「槽」的坑里再挖若干個坑,要不然裝不下我們要裝的東西)。

怎麼用:這裡又涉及到名為「雜湊函式」的東西(不用知道它具體是什麼樣的,因為它具有變色龍的性質,知道它是乙個函式就好),我們利用這個雜湊函式(實際上就是通過一系列的計算),將我們要儲存的資料放到那乙個乙個坑里去。那麼問題來了,要是坑里已經放了乙個資料了,新資料通過計算之後又是應該放在那個坑里的,放不下怎麼辦,這樣上面說的坑里再挖坑就排上用場了

通過以上簡介,我們大概知道了hash table的大概情況了,接下來,上手了,**來也~

/**  

* 存

* @param k

* @param v

*/

public boolean put(k k, v v)

return false;

}

/**  

* 取

* @param k

* @return

*/

public v get(k k)

// 5.若不為空,遍歷鍊錶,比較k是否相等,如果k相等,則返回該value

while (null != entry)

entry = entry.getnext();

}

// 如果遍歷完了不相等,則返回空

return null;

}

/**  

*將指定的結點temp新增到指定的hash表table當中

* 新增時判斷該結點是否已經存在

* 如果已經存在,返回false

* 新增成功返回true

* @param temp

* @param table

* @return

*/

private boolean setentry(entry< k,v> temp,entry table)

else if(temp.getkey() == entry.getkey() && temp.getvalue() != entry.getvalue())

//不相等則比較下乙個元素

else if (temp.getkey() != entry.getkey())

// 沒有到達隊尾,繼續遍歷下乙個元素

entry = entry.getnext();

}

}

// 3.2當遍歷到了隊尾,如果都沒有相同的元素,則將該元素掛在隊尾

addentry2last(entry,temp);

return true;

}

// 4.若不存在,直接設定初始化元素

setfirstentry(temp,index,table);

return true;

}

/**  

* 擴容

* @param newsize 新的容器大小

*/

private void resize(int newsize)

}

// 3.改變指向

container = newtable;

}

ps.擴容存在的意義:當乙個槽裡挖得坑太多了,總會有不能再挖的一天,這個時候我們就只能把槽的數量增加,當槽的數量增加之後,我們應該複製之前的所有元素,將其再遍歷存一次。

最後的最後,各種資料結構增刪查改的時間比較,省略。在下只附上hash表究竟有多快~

資料結構之什麼是資料結構

先看看官方怎麼說的 資料結構是計算機儲存 組織資料的方式。資料結構是指相互之間存在一種或多種特定關係的資料元素的集合。通常情況下,精心選擇的資料結構可以帶來更高的執行或者儲存效率。資料結構往往同高效的檢索演算法和索引技術有關。個人認為 和鬥地主乙個道理。資料就是你手裡牌,資料結構就是怎麼組合你的牌比...

資料結構之儲存結構

儲存結構是資料 的邏輯結構 用計算機語言的實現,常見的 儲存結構 有 順序儲存 鏈式儲存 索引儲存 以及雜湊儲存 其中雜湊所形成的儲存結構叫 雜湊表 又叫雜湊表 因此雜湊表也是一種儲存結構。棧只是一種抽象資料型別,是一種邏輯結構,棧邏輯結構對應的順序儲存結構為順序棧,對應的鏈式儲存結構為鏈棧 迴圈佇...

資料結構之線性結構

資料結構學習虛函式,幾個知識點 1 抽象類函式本身不能直接例項化,需要其子類例項化虛函式,才能例項化。繼承抽象類的子類必須重寫虛函式,具體函式可實現,也可不實現。2 const修飾符,若修飾函式,則函式引數不能被改變。若修飾成員變數,則成員變數在使用過程中不被改變。修飾傳入引數,則避免引數被改變。3...