**
hash表,有時候也被稱為雜湊表。個人認為,hash表是介於鍊錶和二叉樹之間的一種中間結構。鍊錶使用十分方便,但是資料查詢十分麻煩;二叉樹中的資料嚴格有序,但是這是以多乙個指標作為代價的結果。hash表既滿足了資料的查詢方便,同時不占用太多的內容空間,使用也十分方便。
打個比方來說,所有的資料就好像許許多多的書本。如果這些書本是一本一本堆起來的,就好像鍊錶或者線性表一樣,整個資料會顯得非常的無序和凌亂,在你找到自己需要的書之前,你要經歷許多的查詢過程;而如果你對所有的書本進行編號,並且把這些書本按次序進行排列的話,那麼如果你要尋找的書本編號是n,那麼經過二分查詢,你很快就會找到自己需要的書本;但是如果你每乙個種類的書本都不是很多,那麼你就可以對這些書本進行歸類,哪些是文學類,哪些是藝術類,哪些是工科的,哪些是理科的,你只要對這些書本進行簡單的歸類,那麼尋找一本書也會變得非常簡單,比如說如果你要找的書是計算機方面的書,那麼你就會到工科一類當中去尋找,這樣查詢起來也會顯得麻煩。
不知道這樣舉例你清楚了沒有,上面提到的歸類方法其實就是hash表的本質。下面我們可以寫乙個簡單的hash操作**。
a)定義hash表和基本資料節點
[cpp]view plain
copy
print?
typedef
struct _node
node;
typedef
struct _hash_table
hash_table;
typedef struct _node
node;
typedef struct _hash_table
hash_table;
b)建立hash表
[cpp]view plain
copy
print?
hash_table* create_hash_table()
hash_table* create_hash_table()
c)在hash表當中尋找資料
[cpp]view plain
copy
print?
node* find_data_in_hash(hash_table* phashtbl, int data)
return null;
}
node* find_data_in_hash(hash_table* phashtbl, int data)
return null;
}
d)在hash表當中插入資料
[cpp]view plain
copy
print?
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;
}
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表中刪除資料
[cpp]view plain
copy
print?
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;
}
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;
}
總結:
1、hash表不複雜,我們在開發中也經常使用,建議朋友們好好掌握;
2、hash表可以和二叉樹形成復合結構,至於為什麼,建議朋友們好好思考一下?
一步一步寫演算法(之hash表)
hash表,有時候也被稱為雜湊表。個人認為,hash表是介於鍊錶和二叉樹之間的一種中間結構。鍊錶使用十分方便,但是資料查詢十分麻煩 二叉樹中的資料嚴格有序,但是這是以多乙個指標作為代價的結果。hash表既滿足了資料的查詢方便,同時不占用太多的內容空間,使用也十分方便。打個比方來說,所有的資料就好像許...
一步一步寫演算法(之hash表)
hash表,有時候也被稱為雜湊表。個人認為,hash表是介於鍊錶和二叉樹之間的一種中間結構。鍊錶使用十分方便,但是資料查詢十分麻煩 二叉樹中的資料嚴格有序,但是這是以多乙個指標作為代價的結果。hash表既滿足了資料的查詢方便,同時不占用太多的內容空間,使用也十分方便。打個比方來說,所有的資料就好像許...
一步一步寫演算法(之hash表)
hash表,有時候也被稱為雜湊表。個人認為,hash表是介於鍊錶和二叉樹之間的一種中間結構。鍊錶使用十分方便,但是資料查詢十分麻煩 二叉樹中的資料嚴格有序,但是這是以多乙個指標作為代價的結果。hash表既滿足了資料的查詢方便,同時不占用太多的內容空間,使用也十分方便。打個比方來說,所有的資料就好像許...