演算法導論 雜湊表

2021-08-17 03:41:11 字數 1789 閱讀 6786

#include#include#includeusing namespace std;

const int length = 6;//待插入的數列長度

const int tablesize = 11;//雜湊表的容量 應該打大於數列長度以保證每個元素都有處可放

typedef struct hash*hashtable, hashnode;

void inittable(int num, int tablesize);

void hashinsert1(int num, int data, int size, int len);//開放定址法

void hashinsert2(hashtable num, int data, int len, int tablesize);//拉鍊法

int hashsearch1(int num, int tablesize, int key);//雜湊查詢 開放位址法

int hashsearch2(hashtable num, int tablesize, int key);//雜湊查詢 拉鍊法

void output(int num, int length);

int main ()

; int num1[tablesize];

inittable(num1, tablesize);//建造雜湊表 進行初始化

hashinsert1(num1, data, tablesize, length);

output(num1, tablesize);

hashtable num2[tablesize];

hashinsert2(num2, data, length, tablesize);

int key = 8;//在表中查詢值為key的元素

printf("\n開放定址法\n");

if(hashsearch1(num1, tablesize, key))

printf("%d 存在於表中", key);

else

printf("查詢失敗");

printf("\n\n拉鍊法:\n");

if(hashsearch2(num2, tablesize, key))

printf("%d 存在於表中", key);

else

printf("查詢失敗");

} void inittable(int num, int tablesize)

//運用除法雜湊法 h(k)=k mod m

void hashinsert1(int num, int data, int tablesize, int len)

num[k] = data[i];

} }}//與插入操作時相同原理

int hashsearch1(int num, int tablesize, int key)

return 0; }}

//拉鍊法的思想就是 將索引相同的元素連線到同乙個節點上 因此在查詢時不需要對查詢位址進行改變 而只需要在該位址上不斷後移

int hashsearch2(hashtable num, int tablesize, int key)

} }

void hashinsert2(hashtable num, int data, int len, int tablesize)

for(int i = 0; i < len; i++) }

} void output(int num, int len)

{ for(int i=0; i

《演算法導論》雜湊表

雜湊表 hash table 是實現字典操作 查詢 插入 刪除 的有效資料結構,具有很高的查詢效率。一定情況下查詢元素的期望時間是o 1 優於鍊錶 o n 和直接定址的陣列 查詢也是o 1 相當。但當實際儲存的關鍵字數比可能的關鍵字總數小的時候,雜湊錶比陣列有效。一些記號 直接定址,關鍵字k存放在第...

演算法導論 雜湊表

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 8 雜湊表 hash table 是一種支援高效插入,查詢,刪除操作的動態集合結構。並且在滿足一些合理假設下,這些操作的平均時間複雜度可以達到 1 這也是雜湊表能夠和二叉搜尋樹 紅黑樹 抗衡的乙個重要方面。一 直接定址表 當關鍵字集合...

演算法導論11(雜湊表)

11.1 直接定址表 struct node node directaddresssearch node t,int k void directaddressinsert node t,node x void directaddressdelete node t,node x 11.2 雜湊表 通過...