对于P126的哈希表构成:
1 struct nlist *install(char *name, char *defn) 2 { 3 struct nlist *np; 4 unsigned hashval; 5 if ((np = lookup(name)) == NULL) 6 { 7 np = (struct nlist *) malloc(sizeof(*np)); 8 if (np == NULL || (np->name = strdup(name)) == NULL) 9 return NULL; 10 hashval = hash(name); 11 np->next = hashtab[hashval]; 12 hashtab[hashval] = np; 13 } else 14 free((void *) np->defn); 15 if ((np->defn = strdup(defn)) == NULL) 16 return NULL; 17 return np; 18 }
这两句应该注意一下:
1 np->next = hashtab[hashval]; 2 hashtab[hashval] = np;
这两句的作用是将后插入的数据放在以前插入的数据的前面,让其下次访问的时候可以先访问到,具体的含义未知,应该是为了使得关联性的数据查找起来更加方便之用。