2016-01-02 65 views
0

我正在寫一個程序在C中使用一個哈希表作爲一個字典。當加載因子達到75  %時,會創建一個新表,其中舊的大小加倍,而舊的散列表將從內存中釋放。越來越多的動態哈希表

的問題是用戶的主要程序只能訪問一些功能:

  • create_dictionary() - 返回一個指向該詞典
  • close_dictionary(dictionary)
  • add_word(dictionary, word)

所以用戶創建一本詞典,添加大量詞彙,最終字典需要增長。輔助函數在後臺自動調用。現在的問題是,用戶不知道舊字典已被替換,並且指向舊字典的指針不再正確。

解決此問題的最佳方法是什麼?我能以某種方式增加散列表嗎?現在我分配了新的空間,老調重彈舊話了進去,然後刪除舊的哈希表

+2

什麼是「字典」 ?如果它是一個指向後備數組的指針,那麼封裝可能太弱。它應該是一個指向某個'struct'的指針,即使你需要重新分配也不會改變。否則,函數將不得不'返回'新的指針。 (順便說一句,如果你的界面還有一個功能可以在字典中查找某個東西,那麼它會更有用......) – 5gon12eder

+1

你不是第一個在C中實現哈希表的人。看看現有的簡單實現(例如一個來自[Gnulib](https://www.gnu.org/software/gnulib/):['hash.h'](http://git.savannah.gnu.org/gitweb/?p=gnulib.git ; a = blob; f = lib/hash.h; hb = HEAD),['hash.c'](http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob ; F = LIB/hash.c; HB = HEAD))。如果您對您的實施有特定問題,我們需要查看*您的*代碼。 – 5gon12eder

回答

1

一種可能是讓你的指針指向一個支撐結構代替。在該結構中,您將哈希表的大小,它包含的元素的數量以及指向該表的指針。當您檢測到您的75%已被超出時,您將分配一個更大的表格,將舊值散列到新表格中,然後釋放舊錶格並將結構中的指針指向新表格