/*主要用到的函數:*/
創建哈希表
int hcreate_r (size_t __nel, struct hsearch_data *__htab);查詢哈希表
int hsearch_r (ENTRY __item, ACTION __action, ENTRY **__retval,struct hsearch_data *__htab) __THROW;
銷燬哈希表
void hdestroy_r (struct hsearch_data *__htab) __THROW;
例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* for memset() */
#include <errno.h>
#define __USE_GNU /* for reentrant functions hsearch_r etc. */
#include <search.h>
char *data[] = { "alpha", "bravo", "charlie", "delta",
"echo", "foxtrot", "golf", "hotel", "india", "juliet",
"kilo", "lima", "mike", "november", "oscar", "papa",
"quebec", "romeo", "sierra", "tango", "uniform",
"victor", "whisky", "x-ray", "yankee", "zulu"
};
#define INIT_TABLE_SIZE ((size_t) 128)
int main(void) {
ENTRY e;
ENTRY* search_result;
int ret;
int i;
struct hsearch_data tab;
memset(&tab, 0, sizeof(tab));
ret = hcreate_r(sizeof(data), &tab);
if(!ret) {
if(errno == ENOMEM) {
printf("NOMEM\n");
}
printf("ERROR\n");
return 0;
}
/* REGISTER DATA */
for(i = 0; i < 24; i++) {
e.key = data[i];
e.data = (void*)i;
ret = hsearch_r(e, ENTER, &search_result, &tab);
if(ret == 0) {
printf("Hash table is full\n");
return 0;
}
printf("Registered %s:%d\n", e.key, (int)e.data);
}
for (i = 22; i < 24; i++) {
e.key = data[i];
ret = hsearch_r(e, FIND, &search_result, &tab);
printf("%s : %s:%d\n", e.key,
ret ? search_result->key : "NULL", ret ? (int)(search_result->data) : 0);
}
/* SEARCH TEST: NO HIT */
e.key = data[24];
ret = hsearch_r(e, FIND, &search_result, &tab);
printf("%s : %s:%d\n", e.key,
ret ? search_result->key : "NULL", ret ? (int)(search_result->data) : 0);
return 0;
}