好程序員訓練營
<A href="http://www.goodprogrammer.org/" target="blank">ios培訓</A>
------我的c語言筆記,期待與您交流!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define HASHSIZE 101
struct nlist
{
struct nlist *next;
char *name;
char *defn;
};
/*hash函數:爲字符串s生成散列值 p126*/
unsigned hash(char *s)
{
unsigned hashval;
for(hashval=0;*s!='\0';s++)
hashval=*s+31*hashval;
return hashval %HASHSIZE;
}
/*lookup函數:在hashtab中查找s p126*/
struct nlist *lookup(char *s)
{
struct nlist *np;
for(np=hashtab[hash(s)];np!=NULL;np=np->next)
if(strcmp(s,np->name)==0)
return np;
return NULL;
}
/*strdup函數:複製s到某個位置,並且把該地址返回 P126*/
char *strdup(char *s)
{
char *p;
p=(char *) malloc(strlen(s)+1);
if(p!=NULL)
strcpy(p,s);
return p;
}
/*install函數:將(name,defn)加入到hashtab中 p127*/
struct nlist *install(char *name,char *defn)
{
struct nlist *np;
unsigned hashval;
if((np=lookup(name))==NULL)
{
np=(struct nlist *) malloc(sizeof(*np));
if(np==NULL||(np->name=strdup(name))==NULL)
return NULL;
hashval=hash(name);
np->next=hashtab[hashval];//出現衝突的話,把新的np放在表頭
hashtab[hashval]=np;
}
else
free((void *)np->defn);
if((np->defn=strdup(defn))==NULL)
return NULL;
return np;
}
int main()
{
char *s0="abcdefghijk";
char *s1="1234";
struct nlist *p,*p2;
p=install(s0,s1);
p2=install(s0,s1);
printf("%s %s\n",p->name,p->defn);
printf("%s %s\n",p2->name,p2->defn);
}