雜湊表(雜湊表)及其實現

2021-07-17 03:28:15 字數 2805 閱讀 2043

雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

例如:給定表m,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址,則稱表m為雜湊(hash)表,函式f(key)為雜湊(hash) 函式。

雜湊表的關鍵在於:如何構造雜湊函式如何處理衝突

概念在這就不詳細解釋了,可以參考:

這裡只做簡單的總結:

#include 

#include // int_max

#define null_key int_max

using namespace std;

// 開位址法雜湊表儲存結構

typedef struct

hashtable;

void init(hashtable &ht, int size); // 初始化雜湊表

void destory(hashtable &ht); // 銷毀雜湊表

int getsize(hashtable &ht); // 獲取雜湊表大小

int hash(hashtable &ht, int key); // 雜湊函式

bool insert(hashtable &ht, int key); // 插入

int search(hashtable &ht, int key); // 查詢

bool remove(hashtable &ht, int key); // 刪除

int main()

else

if(ch == 'f')

else

if(ch == 'd')

}destory(ht);

return0;}

void init(hashtable &ht, int size)

}void destory(hashtable &ht)

int getsize(hashtable &ht)

int hash(hashtable &ht, int key)

bool insert(hashtable &ht, int key)

}return

false;

}int search(hashtable &ht, int key)

else

if(ht.base[pos] == null_key)

}return ht.size;

}bool remove(hashtable &ht, int key)

return

false;

}

#include 

#include

#include // int_max

#define null_key int_max

using

namespace

std;

// 鏈位址法雜湊表結點的儲存結構

struct hashtablenode

;// 鏈位址法雜湊表的儲存結構

typedef

struct

hashtable;

void init(hashtable &ht, int size); // 初始化雜湊表

void destory(hashtable &ht); // 銷毀雜湊表

int getsize(hashtable &ht); // 獲取雜湊表大小

int hash(hashtable &ht, int key); // 雜湊函式

bool insert(hashtable &ht, int key); // 插入

int search(hashtable &ht, int key); // 查詢

bool remove(hashtable &ht, int key); // 刪除

int main()

else

if(ch == 'f')

else

if(ch == 'd')

}destory(ht);

return0;}

void init(hashtable &ht, int size)

}void destory(hashtable &ht)

}delete ht.head;

ht.head = null;

ht.size = 0;

}int getsize(hashtable &ht)

int hash(hashtable &ht, int key)

bool insert(hashtable &ht, int key)

int search(hashtable &ht, int key)

pnode = pnode->next;

}return ht.size;

}bool remove(hashtable &ht, int key)

plast = pnode;

pnode = pnode->next;

}if(pnode)

else

delete pnode;

return

true;

}return

false;

}

雜湊表(雜湊表)的實現

雜湊函式直接用key size的形式,size為雜湊表的大小。衝突處理採用平方探測法,為保證可以探測到整個雜湊表空間,雜湊表大小設定為4k 3形式的素數。當雜湊表中的元素過多時會造成效能下降,這時應該倍增雜湊表的大小,重新計算原來雜湊表中每個元素在新的雜湊表中的位置。雜湊表的實現 hashtable...

雜湊表(雜湊表) C 實現

雜湊函式就是 關鍵字key 到 值value 的對映 value f key value反映的是關鍵字key的儲存位址。直接定址法 f key a key b 例如存放不同出生年份的人口數量,出生年份是關鍵字,那麼可以用直接定址法。直接定址法的優點是簡單均勻,也不會產生衝突 缺點是該方法適合表比較小...

雜湊表 雜湊表

一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...