से तालिका लुकअप स्थापित फ़ंक्शन K & की धारा 6.6 एक लिंक की गई सूची का उपयोग करके हैश तालिका पर चर्चा करता है।के एंड आर
संक्षेप में, हैश तालिका पॉइंटर्स की एक सरणी है। पॉइंटर्स एक लिंक्ड सूची को इंगित करता है। लिंक्ड सूची एक struct की तरह लग रहा है जो:
struct nlist { /* table entry: */
struct nlist *next; /* next entry in chain */
char *name; /* defined name */
char *defn; /* replacement text */
};
नाम मिश्रित होता है, और इस हैश तालिका में सूचकांक निर्धारित करता है।
np->next = hashtab[hashval];
hashtab[hashval] = np;
जब मैं इस को समझने की कोशिश, मैं आते रहते हैं:
struct nlist *install(char *name, char *defn) {
struct nlist *np;
unsigned hashval;
if ((np = lookup(name)) == NULL) { /* not found */
np = (struct nlist *) malloc(sizeof(*np));
if (np == NULL || (np->name = strdup(name)) == NULL)
return NULL;
hashval = hash(name);
np->next = hashtab[hashval];
hashtab[hashval] = np;
} else /* already there */
free((void *) np->defn); /*free previous defn */
if ((np->defn = strdup(defn)) == NULL)
return NULL;
return np;
}
सब कुछ निम्नलिखित 2 लाइनों के अलावा समझ में आता है: अध्याय तो मेज पर एक नाम/defn जोड़ी जोड़ने के लिए कोड से पता चलता इस निष्कर्ष पर कि सूची अब खुद से जुड़ी हुई है और यदि आप लिंक की गई सूची को पार करने का प्रयास करते हैं तो यह कुत्ते की तरह अपनी पूंछ का पीछा करने जैसा होगा। मैं कोड को एनपीएल के आगे एनपी-> सेट करने की उम्मीद करता हूं।
मुझे क्या समझ में नहीं आ रहा है? यह कोड कैसे काम करता है?
+1 यह एक सहायक नियम है – MByD
+1 कुछ मैं पॉइंटर्स के बारे में अपने लेख में भी कुछ कहता हूं। ठोस सलाह –