Can I use a single pointer for my hash table in C? -


मैं एक हैश तालिका को निम्न तरीके से लागू करना चाहता हूं:

  struct list {char * स्ट्रिंग; संरचना सूची * अगला; }; संरचना हैश_टेबल {int size; / * तालिका का आकार * / संरचना सूची ** तालिका; / * तालिका तत्व * /};  

इसके बाद के संस्करण की तरह संरचना हैश_टेबल की तरह, मैं इसका उपयोग कर सकता हूं:

  struct hash_table {int size; / * तालिका का आकार * / संरचना सूची * तालिका; / * तालिका तत्व * /};  

यही है, क्या मैं सिर्फ हैश तालिका तत्वों के लिए एक डबल पॉइंटर के बजाय एक पॉइंटर का उपयोग कर सकता हूँ? यदि हां, तो कृपया तालिका में तत्वों को कैसे संग्रहीत किया जाएगा, इस तरह के अंतर को समझाएं?

ठीक है, वह निर्भर करता है। यदि आप तालिका [i] को देखते हैं, तो आपको कैसे पता चलेगा कि यह खाली है या नहीं? यदि आप सूची ** का उपयोग करते हैं, तो तालिका [आई] प्रकार की सूची * है, और इसलिए आप आसानी से बता सकते हैं कि क्या यह रिक्त है अगर यह शून्य है। यदि आप टाइप लिस्ट * का उपयोग करते हैं, तो तालिका [i] एक सूची है, और जब तक आप एक रिक्त, रिक्त या कुंजी के लिए कुछ अन्य मान का उपयोग करते हैं, यह दर्शाता है कि सूची रिक्त है, तो यह काम नहीं करेगा। तो, हाँ, आप सूची * का उपयोग कर सकते हैं, लेकिन फिर आपको एक अतिरिक्त संवेदी स्थिति जोड़ने की आवश्यकता है, जो यह भी सीमित कर सकता है कि आप किस प्रकार की कुंजी को अनुमति दें वैकल्पिक रूप से, आप केवल सूची [i] के पहले तत्व को अनदेखा कर सकते हैं, हालांकि, यह बेकार होगा। मुझे यह भी बता देना चाहिए कि सूची के बजाय सूची * का प्रयोग करना तालिका के सामने [i] कठिन तत्व को सम्मिलित करता है; यदि आप एक सूची ** टाइप का उपयोग करते हैं, तो आपको बस तालिका [i] के मौजूदा मान में नई प्रविष्टि के अगले पॉइंटर को सेट करना होगा, और फिर तालिका में आवंटित प्रविष्टि के पते [i] को आवंटित करना होगा। यदि आप टाइप सूची * का उपयोग करते हैं, तो आपको टेबल [i] और तालिका [i] -> अगले के बीच आइटम को सम्मिलित करने की आवश्यकता होगी, जो प्रविष्टि के तर्क को बेकार में जटिल बना देता है।

इसके अलावा, मुझे यह जोड़ना चाहिए आपकी हैश तालिका की परिभाषा दोषपूर्ण है। एक हैश तालिका वस्तुओं के एक सेट को दूसरे में मैप करने के लिए माना जाता है। आपकी सूची संरचना का एक मान है इसके लिए एक कुंजी और एक मूल्य दोनों की जरूरत है। एक हैश तालिका के लिए एक बेहतर घोषणा निम्नलिखित होगी:

  typedef struct हैशटेबल एंटर {char * key; शून्य * मान; Struct हैशटेबलएन्टर्री * अगला; } हैशटेबलएन्टर्री; टाइप करेंएफ़फ़ॉर्म एचशटेबल {हैशटेबलएन्टर्री ** प्रविष्टियां; इंट क्षमता; // प्रविष्टियों का आकार int लंबाई; // वर्तमान में मानचित्र में मौजूद कुंजी / मान जोड़े की संख्या} HashTable;  

Comments