/*主要用到的函数:*/
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; }