演算法 雜湊表

2022-05-20 00:48:12 字數 1688 閱讀 6484

**:

hash表,有時候也被稱為雜湊表。個人認為,hash表是介於鍊錶和二叉樹之間的一種中間結構。鍊錶使用十分方便,但是資料查詢十分麻煩;二叉樹中的資料嚴格有序,但是這是以多乙個指標作為代價的結果。hash表既滿足了資料的查詢方便,同時不占用太多的內容空間,使用也十分方便。

打個比方來說,所有的資料就好像許許多多的書本。如果這些書本是一本一本堆起來的,就好像鍊錶或者線性表一樣,整個資料會顯得非常的無序和凌亂,在你找到自己需要的書之前,你要經歷許多的查詢過程;而如果你對所有的書本進行編號,並且把這些書本按次序進行排列的話,那麼如果你要尋找的書本編號是n,那麼經過二分查詢,你很快就會找到自己需要的書本;但是如果你每乙個種類的書本都不是很多,那麼你就可以對這些書本進行歸類,哪些是文學類,哪些是藝術類,哪些是工科的,哪些是理科的,你只要對這些書本進行簡單的歸類,那麼尋找一本書也會變得非常簡單,比如說如果你要找的書是計算機方面的書,那麼你就會到工科一類當中去尋找,這樣查詢起來也會顯得麻煩。

不知道這樣舉例你清楚了沒有,上面提到的歸類方法其實就是hash表的本質。下面我們可以寫乙個簡單的hash操作**。

a)定義hash表和基本資料節點

typedef struct _node

node;

typedef struct _hash_table

hash_table;

b)建立hash表

hash_table* create_hash_table()

c)在hash表當中尋找資料

node* find_data_in_hash(hash_table* phashtbl, int data)

return null;

}

d)在hash表當中插入資料

status insert_data_into_hash(hash_table* phashtbl, int data)

if(null != find_data_in_hash(phashtbl, data))

return false;

pnode = phashtbl->value[data % 10];

while(null != pnode->next)

pnode = pnode->next;

pnode->next = (node*)malloc(sizeof(node));

memset(pnode->next, 0, sizeof(node));

pnode->next->data = data;

return true;

}

e)從hash表中刪除資料

status delete_data_from_hash(hash_table* phashtbl, int data)

phead = phashtbl->value[data % 10];

while(pnode != phead ->next)

phead = phead->next;

phead->next = pnode->next;

final:

free(pnode);

return true;

}

雜湊表演算法

雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程式中,...

雜湊表演算法

今天大概講一講雜湊表的原理,構造,衝突等。雜湊 hash 是什麼,其實雜湊就是一種對映,將一些線性資料通過乙個函式 h算出乙個值作為下表,定義乙個 a陣列單元來按照下標儲存資料。舉例 離散優化就是一種特殊的雜湊,它的函式比較簡單。如圖,如果這個陣列的資料下標不大的話,我們就可以直接排序算出距離,但當...

演算法 雜湊表

如果能在關鍵字與記錄儲存的位置之間建立一種聯絡,則可以不經過比較,直接對關鍵字進行計算得出記錄的位置,再到相應位置去讀取資料即可。將這種關鍵字與記錄儲存位置之間的對應關係稱為雜湊函式,將這種方式建立的表稱為雜湊表。include define hash len 13 define table len...