*NIX programming : 系統提供的 HASH實作
Unix 系統內定提供一個簡單的HASH 表實作.依照POSIX.1-2001的規範,OS應該提供以下三個介面 :hcreate(), hsearch(), and hdestroy() .這三個其實是很久已前SVR4時代就有的東西. 各位如果不愛看我的說明,可以自行 man 取得外國人寫的文件. -------------------------------------------- 首先來看這三個介面的原型定義 int hcreate(size_t nel); ENTRY *hsearch(ENTRY item, ACTION action); void hdestroy(void); 首先hcreate 是通知系統先配置好一個記憶體空間. hsearch 則是負責hash元素的加入與搜尋(別被函式名稱騙了),hdestroy就是把hcreate配置的空間釋放掉 基本的使用方式就是找一個你喜歡的地方先呼叫hcreate分配空間,hcreate必定在任何hash操作前呼叫.然後用hsearch 加入你的鍵值跟資料.當然要搜尋也是呼叫hsearch. 看一下這三個介面原型,發現他們不會傳回一個hash的實體物件對不對? 是的,他只能管理一個HASH table. 好拉,現在讓我們插的更深入一點(咳咳....),講一下這三個函式的詳細用法 int hcreate(size_t nel);通知OS先分配記憶體開始實作HASH . nel 參數是要通知系統你"預估"HASH最大的量是多少.但是,每個作業系統提供的演算法實作都所有不同,系統不一定會真的分配nel數量的空間出來, ENTRY *hsearch(ENTRY item, ACTION action); hsearch 實際上負責元素的加入與元素的搜尋.其中 ENTRY資料型別如下 typedef struct entry { char *key; void *data; } ENTRY; key 成員就是HASH的"鍵值",data 就是我們準備要存放的資料,key的資料必須是一個符合C語言合法的字串資料,也就是說必須由0結尾拉.data的型別則是void * ,表示他不管你的型別,他也不會幫你把dat...