/*hash.h -- 雜湊表標頭檔*/<br />enum KindOfEntry {LEGITIMATE, EMPTY, DELETED} ;</p><p>#define PRIME (7)<br />#define FAILED (-2)<br />#define NUL ('/0')<br />#define FALSE (0)<br />#define TRUE (1)</p><p>/*資料類型定義*/</p><p>typedef char Name ;<br />typedef struct cell<br />{<br />Name name ;<br />int be_deleted ;//在優先隊列中是否是已刪除過的<br />enum KindOfEntry entry ;<br />int index_in_adjacenty_list ;<br />} Cell ;<br />typedef struct hash_table<br />{<br />Cell * lists ;<br />int current ;<br />int capacity ;<br />} * Hash_Table ;</p><p>/*介面函式宣告*/</p><p>/*操作:根據一個資料產生一個數值並返回*/<br />/*操作前:pht 指向一個已初始化的散列表, pname 指向一個資料*/<br />/*操作後:根據該資料產生一個數值並返回*/<br />/*時間複雜度:O(1)*/<br />int Hash (const Hash_Table * const pht, const Name * const pname) ;</p><p>/*操作:建立並初始化一個散列表*/<br />/*操作前:pht 指向一個散列表, capacity 是指示表大小的資料*/<br />/*操作後:如果 capacity > 0 && 記憶體配置成功, 該散列表被建立為 >= capacity 最小素數大小並初始化為空白, 返回1; 否則返回0*/<br />/*時間複雜度:O(1)*/<br />int Initialize_H (Hash_Table * const pht, const int capacity) ;</p><p>/*操作:尋找並返回一個指向資料在散列表中的位置的指標*/<br />/*操作前:pht 指向一個已初始化的散列表, pname 指向被尋找的資料*/<br />/*操作後:如果找到資料域為 *pname 的元素, 返回指向該元素的指標; 否則返回指向尋找結束時停止在散列表元素的指標*/<br />/*時間複雜度: O(N)*/<br />Cell * Find_H (const Hash_Table * const pht, const Name * const pname) ;</p><p>/*操作:向散列表中添加一個元素並返回在散列表中的索引*/<br />/*操作前:pht 指向一個已初始化的散列表, pname 是指向名字的指標, index 是元素在鄰接表中的索引*/<br />/*操作後:如果表當前大小 <= 表大小的一半, 添加該元素, 返回當前索引; 否則返回 FAILED*/<br />/*時間複雜度: O(N)*/<br />int Insert_H (const Hash_Table * const pht, const Name * const pname, const int index) ;</p><p>/*操作:從散列表中懶惰刪除資料域為指定資料的元素*/<br />/*操作前:pht 指向一個已初始化的散列表, pname 是指向名字的指標*/<br />/*操作後:如果找到該元素, 對其進行懶惰刪除, 返回 1 ; 否則返回 0*/<br />/*時間複雜度:O(N)*/<br />int Delete_H (const Hash_Table * const pht, const Name * const pname) ;</p><p>/*操作:釋放一個散列表所佔用的記憶體空間*/<br />/*操作前:pht 指向一個已初始化的散列表*/<br />/*操作後:該散列表所佔記憶體空間被釋放*/<br />/*時間複雜度:O(1)*/<br />void Release_H (const Hash_Table * const pht) ;