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 雜湊表 通過...