C語言 雜湊表

2021-08-20 17:31:11 字數 3107 閱讀 8235

線性探測法

雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。

雜湊函式

得到乙個數的hash值的函式,被稱為雜湊函式。

1. 整數

除留餘數法, 對於大小為素數m的陣列,對於任意正整數k,計算k除以m的餘數。m一般取素數。

#define prime 11

int getinthashcode(int a)

字串

保留除餘法
int gethashcode(char *str, int length) 

return hash;

}

間隔n個字元,得到雜湊值

//間隔dk個字元

int gethashcode_2(char *str, int length, int dk)

return hash;

}

如果給定的陣列超過我們儲存的大小,就會有相同的雜湊值,所以我們需要避免雜湊衝突

雜湊衝突

拉鍊法

將同乙個雜湊值的跟在之前的節點之後。

**實現

adt:

#include 

#include

#include

#include

#define prime 11

typedef

struct hashnode hashnode, *hashnodeptr;

typedef

struct hashtable, *hashtableptr;

int getinthashcode(int a);

hashnodeptr createhashnode(int key);

//拉鍊法

hashtableptr createhashtable() ;

void inserthashtable(hashtableptr h, int key);

void deletehashtable(hashtableptr h);

hashnodeptr searchhashtable(hashtableptr h, int key);

完整**:

#include 

#include

#include

#include

#define prime 11

int getinthashcode(int a)

typedef

struct hashnode hashnode, *hashnodeptr;

typedef

struct hashtable, *hashtableptr;

hashnodeptr createhashnode(int key)

//拉鍊法

hashtableptr createhashtable()

return h;

}void inserthashtable(hashtableptr h, int key)

else

t->next = hnode;

}}void deletehashtable(hashtableptr h)

}}hashnodeptr searchhashtable(hashtableptr h, int key)

else

return null;

}}void main() ;

int length = sizeof(a) / sizeof(int);

hashtableptr h = createhashtable();

for (int i = 0; i < length; i++)

searchhashtable(h, 10);

deletehashtable(h);

}

線性探測法

線性探測法是開放定址法解決雜湊衝突的一種方法,基本原理為,使用大小為m的陣列來儲存n個鍵值對,其中m>n,我們需要使用陣列中的空位解決碰撞衝突。

如果雜湊值相同儲存到下乙個節點

**實現

#include 

#include

#include

#include

#define prime 17

#define infinite 65525

int getinthashcode(int a)

typedef

struct hashtable, *hashtableptr;

//線性探測法

hashtableptr createlinearhashnode()

return h;

}void insertlinearhashtable(hashtableptr h, int key)

}}void deletelinearhashtable(hashtableptr h)

int searchlinearhashtable(hashtableptr h, int key)

return -1;

}void main() ;

int length = sizeof(a) / sizeof(int); //lengthhashtableptr h = createlinearhashnode();

for (int i = 0; i < length; i++)

searchlinearhashtable(h, 10);

deletelinearhashtable(h);

}

c語言雜湊表電子辭典 C語言雜湊表

功能,利用雜湊表製作 查詢系統,根據姓名查詢 建立了雜湊表之後,我想列印出這個表,但是沒輸出結果 include include include include define maxsize 5 define namelength 20 define phonelength 15 typedef s...

雜湊表新增(C語言(雜湊表(icoding

雜湊表新增 雜湊表 hash table,也叫雜湊表 是根據鍵 key 而直接訪問在記憶體儲存位置的資料結構。也就是說,它通過計算乙個關於鍵值的函式,將所需查詢的資料對映到表中乙個位置來訪問記錄,這加快了查詢速度。這個對映函式稱做雜湊函式,存放記錄的陣列稱做雜湊表。雜湊表相關定義如下 typedef...

雜湊表 雜湊表 C語言簡單實現

本文參考自 大話資料結構 通過某個函式f計算出記錄的儲存位置,而不需要通過比較,這就是一種新的儲存技術 雜湊技術。雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 在查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查...