好程序员训练营
<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);
}
转载于:https://blog.51cto.com/christmas/1620207