通過某種特定的函式/演算法(稱為雜湊函式/演算法)將要檢索的項與用來檢索的索引(稱為雜湊,或者雜湊值)關聯起來,生成一種便於搜尋的資料結構(稱為雜湊表)。也譯為雜湊。
我們需要將輸入的字串進行轉換, 將其轉換成數字, 在插入儲存的數, 當然, 也可能會存在不同字串對應相同的數字, 這時, 為了保證不衝突, 我們將字串對應相同的數字用鍊錶表示, 用鍊錶儲存我們要儲存的東西. 字串是鑰匙, 只能開啟對應的箱子, 而箱子裡也有其他物品, 我們在搜尋箱子就能找到我們想要的
//hashtbld代表的是鑰匙, 而listnode代表的是物品, 因為有多個鑰匙, 所以hashtbl我們用陣列鍊錶表示
struct listnode;
struct hashtbl;
typedef
struct listnode *position;
typedef
struct hashtbl *hashtabl;
const
int n = 10;
struct listnode
;struct hashtbl
;
字串轉換
unsigned int hash(char *key, int size)
初始化鑰匙跟箱子, 跟鍊錶初始化一樣的, 差別只是在於對hashtbl的初始化是陣列
void creat(int size, hashtabl &h)
}
對於初入與刪除, 就像鍊錶的插入跟刪除一樣, 唯一不同的是, 插入(放物品)我們需要計算他的位置, 需要用hash計算來找到位置(找到他的鑰匙, 才能確定放的對應的寶箱), 找到用鍊錶插入的方式, 將他插入鍊錶即可, 刪除也一樣
void inset(hashtabl h, char *key)
}
//刪除
void
dele(hashtabl
h, char *key)
}
源**
#include
#include
struct listnode;
struct hashtbl;
typedef
struct listnode *position;
typedef
struct hashtbl *hashtabl;
const
int n = 10;
struct listnode
;struct hashtbl
;//初始化鑰匙跟箱子
void creat(int size, hashtabl &h)
}//字串轉換
unsigned
int hash(char *key, int size)
position find(hashtabl h, char *key)
//對於初入與刪除, 就像鍊錶的插入跟刪除一樣, 唯一不同的是, 插入(放物品)我們需要計算他的位置,
//需要用hash計算來找到位置(找到他的鑰匙, 才能確定放的對應的寶箱), 找到用鍊錶插入的方式,
//將他插入鍊錶即可, 刪除也一樣
void inset(hashtabl h, char *key)
}//刪除
void dele(hashtabl h, char *key)
}int main()
scanf("%s", key);
dele(h, key);
scanf("%s", key);
position t = find(h, key);
printf("%s", t->ch);
system("pause");
return
0;}
雜湊之分離鏈結法
1 include 2 include 3 include 4 include 5 using std vector 6using std list 7using std string 8 using std find 910 int hash const string key 1119 int h...
雜湊表實現 分離鏈結法
雜湊是一種用於以常數平均時間執行插入 刪除和查詢的技術。對於分離鏈結法,裝填因子應接近於1。main函式還不知道怎麼列印。快期中考試了 hashtable.cpp 定義控制台應用程式的入口點。解決衝突的第一種方法叫做分離鏈結法,其做法是將雜湊到 同一值得所有元素保留到乙個表中。include std...
HashTable C 實現之分離鏈結法
hashtable是以常數時間進行進行插入,刪除和查詢的資料結構。其查詢原理是 通過雜湊函式hash 進行雜湊得到value,value為雜湊表的下表。怎麼能得到均衡的value呢?hash 雜湊一般是通過字串對映到鍵值 index hashtable hash one const elemtype...