#include <iostream>
#include <string.h>
#include <cstdlib>
using namespace std;
#define MAX 100
typedef struct hashnode{
char *name;
char *addr;
struct hashnode *next;
}node;
static node* hashtable[MAX];
unsigned _hash(char *name)
{
unsigned hashval;
for(hashval=0;*name!='\0';name++)
hashval=7*hashval+*name;
return hashval%MAX;
}
node * searchhash(char *name)
{
node *p;
for(p=hashtable[_hash(name)];p!=NULL;p=p->next)
{
if(strcmp(name,p->name)==0)
return p;
}
return NULL;
}
node * inserthash(char *name,char *addr)
{
node *p=searchhash(name);
unsigned hashval;
if(p==NULL)
{
p=(node*)malloc(sizeof(*p));
p->name=strdup(name);
hashval=_hash(name);
p->next=hashtable[hashval];
hashtable[hashval]=p;
}
else
free(p->addr);
p->addr=strdup(addr);
return p;
}
char * getaddr(char *name)
{
node* p=searchhash(name);
if(p==NULL)return NULL;
return p->addr;
}
int main()
{
char *addr;
inserthash("xiaobei","beijing");
addr=getaddr("xiaobei");
cout<<addr<<endl;
return 0;
}