#include <string.h>
#include <stdio.h>
#include <stdlib.h>
//定义hash表结构
typedef struct _node{
char *name;
char *desc;
struct _node *next;
}node;
//hash表大小
#define HASHSIZE 101
static node* hashtab[HASHSIZE];
//初始化hash表
void inithashtab(){
int i;
for(i=0;i<HASHSIZE;i++)
hashtab[i]=NULL;
}
//解决冲突函数
unsigned int hash(char *s){
unsigned int h=0;
for(;*s;s++)
h=*s+h*31;
return h%HASHSIZE;
}
//根据健获取集合节点
node* lookup(char *n){
unsigned int hi=hash(n);
node* np=hashtab[hi];
for(;np!=NULL;np=np->next){
if(!strcmp(np->name,n))
return np;
}
return NULL;
}
char* m_strdup(char *o){
int l=strlen(o)+1;
char *ns=(char*)malloc(l*sizeof(char));
strcpy(ns,o);
if(ns==NULL)
return NULL;
else
return ns;
}
//根据健获取值
char* get(char* name){
node* n=lookup(name);
if(n==NULL)
return NULL;
else
return n->desc;