हैश टेबल एक डेटा संरचना है जिसका उपयोग की-वैल्यू पेयर को स्टोर करने के लिए किया जाता है। हैश फ़ंक्शन का उपयोग हैश तालिका द्वारा किसी इंडेक्स को एक सरणी में गणना करने के लिए किया जाता है जिसमें एक तत्व डाला या खोजा जाएगा।
लीनियर प्रोबिंग ओपन एड्रेसेड हैश टेबल में एक टक्कर समाधान तकनीक है। इस पद्धति में, हैश तालिका का प्रत्येक सेल एक एकल कुंजी-मान युग्म संग्रहीत करता है। यदि हैश तालिका के एक सेल में एक नई कुंजी को मैप करके टकराव होता है जो पहले से ही किसी अन्य कुंजी द्वारा कब्जा कर लिया गया है। यह विधि निम्न निकटतम मुक्त स्थान के लिए तालिका की खोज करती है और वहां नई कुंजी सम्मिलित करती है।
यह लीनियर प्रोबिंग के साथ हैश टेबल्स को लागू करने के लिए एक C++ प्रोग्राम है।
एल्गोरिदम
सम्मिलित करने के लिए:
डिक्लेयर फंक्शन इंसर्ट शुरू करें(int k, int v) int hash_val =HashFunc(k) initize init =-1 इनिशियलाइज़ delindex =-1 जबकि (hash_val!=init और (ht[hash_val]==DelNode::getNode( ) या ht[hash_val] !=NULL और ht[hash_val]->k!=k)) अगर (init ==-1) init =hash_val अगर (ht[hash_val] ==DelNode::getNode ()) delindex =हैश_वल हैश_वल =हैशफंक (हैश_वल + 1) अगर (एचटी [हैश_वल] ==नल || हैश_वल ==इनिट) अगर (डिलिंडेक्स! =-1) एचटी [डेलिंडेक्स] =नया हैशटेबल (के, वी) और एचटी [हैश_वल] =नया हैशटेबल (के, वी) अगर (इनिट! =हैश_वल) अगर (एचटी [हैश_वल]! =डेलनोड ::गेटनोड ()) अगर (एचटी [हैश_वल]! =न्यूल) अगर (एचटी [हैश_वल] -> के ==k) ht[hash_val]->v =v अन्य ht[hash_val] =new HashTable(k, v)End.
खोज कुंजी के लिए:
डिक्लेयर फंक्शन सर्चकी(int k) int hash_val =HashFunc(k) int init =-1 जबकि (hash_val !=init और (ht[hash_val] ==DelNode::getNode() या ht[hash_val] !=NULL और ht[hash_val]->k!=k)) अगर (init ==-1) init =hash_val hash_val =HashFunc(hash_val + 1) if (ht[hash_val] ==NULL या hash_val ==init) वापसी - 1 और वापस ht[hash_val]->vEnd.
हटाने के लिए:
डिक्लेयर फंक्शन रिमूव (int k) int hash_val =HashFunc(k) इनिशियलाइज़ init =-1 जबकि (hash_val!=init और (ht[hash_val] ==DelNode::getNode() या ht[hash_val] !=शुरू करें) NULL और ht[hash_val]->k!=k)) अगर (init ==-1) init =hash_val hash_val =HashFunc(hash_val + 1) if (hash_val !=init &&ht[hash_val] !=NULL) ht हटाएं [हैश_वल] एचटी [हैश_वल] =डेलनोड ::getNode () समाप्त
उदाहरण कोड
#शामिल करें टी वी में; हैशटेबल (इंट के, इंट वी) {यह-> के =के; यह-> वी =वी; }};वर्ग DelNode:सार्वजनिक हैशटेबल {निजी:स्थिर DelNode *en; डेलनोड ():हैशटेबल (-1, -1) {} सार्वजनिक:स्थिर डेलनोड * गेटनोड () {अगर (एन ==न्यूल) एन =नया डेलनोड (); वापसी एन; }}; डेलनोड * डेलनोड ::एन =न्यूल; क्लास हैश मैपटेबल {निजी:हैशटेबल ** एचटी; सार्वजनिक:हैश मैपटेबल () {एचटी =नया हैशटेबल * [टी_एस]; के लिए (int i =0; ik!=k)) {if (init ==-1) ) init =हैश_वल; अगर (एचटी [हैश_वल] ==डेलनोड ::getNode ()) डिलिंडेक्स =हैश_वल; हैश_वल =हैशफंक (हैश_वल + 1); } अगर (एचटी [हैश_वल] ==न्यूल || हैश_वल ==इनिट) { अगर (डिलिंडेक्स! =-1) एचटी [डेलिंडेक्स] =नया हैशटेबल (के, वी); अन्य एचटी [हैश_वल] =नया हैशटेबल (के, वी); } अगर (इनिट! =हैश_वल) { अगर (एचटी [हैश_वल]! =डेलनोड ::गेटनोड ()) { अगर (एचटी [हैश_वल]! =न्यूल) { अगर (एचटी [हैश_वल] -> के ==के) एचटी [हैश_वल] -> वी =वी; } } और एचटी [हैश_वल] =नया हैशटेबल (के, वी); } } इंट सर्चकी (इंट के) { इंट हैश_वल =हैशफंक (के); इंट इनिट =-1; जबकि (हैश_वल!=init &&(ht[hash_val] ==DelNode::getNode() || ht[hash_val]!=NULL &&ht[hash_val]->k!=k)) { अगर (init ==-1 ) init =हैश_वल; हैश_वल =हैशफंक (हैश_वल + 1); } अगर (एचटी [हैश_वल] ==नल || हैश_वल ==init) वापसी -1; अन्य वापसी एचटी [हैश_वल] -> वी; } शून्य निकालें (int k) { int हैश_वल =हैशफंक (के); इंट इनिट =-1; जबकि (हैश_वल!=init &&(ht[hash_val] ==DelNode::getNode() || ht[hash_val]!=NULL &&ht[hash_val]->k!=k)) { अगर (init ==-1 ) init =हैश_वल; हैश_वल =हैशफंक (हैश_वल + 1); } अगर (hash_val!=init &&ht[hash_val] !=NULL) {हटाना ht[hash_val]; एचटी [हैश_वल] =डेलनोड ::getNode (); } } ~ हैश मैपटेबल () {हटाएं [] एचटी; }}; इंट मेन () {हैश मैपटेबल हैश; इंट के, वी; इंट सी; जबकि(1) { cout<<"1. तालिका में तत्व डालें"< >सी; स्विच (सी) {केस 1:cout<<"सम्मिलित होने वाला तत्व दर्ज करें:"; सिनेमा>> वी; cout<<"वह कुंजी दर्ज करें जिस पर तत्व डाला जाना है:"; सीन>>के; हैश। सम्मिलित करें (के, वी); टूटना; केस 2:cout<<"खोए जाने वाले तत्व की कुंजी दर्ज करें:"; सीन>>के; if(hash.SearchKey(k) ==-1) { cout<<"कुंजी पर कोई तत्व नहीं मिला"< >के; हैश। निकालें (के); टूटना; केस 4:बाहर निकलें (1); डिफ़ॉल्ट:cout<<"\nसही विकल्प दर्ज करें\n"; } } वापसी 0;}
आउटपुट
1.तालिका में तत्व डालें2.कुंजी से तत्व खोजें3.कुंजी पर तत्व हटाएं4.बाहर निकलेंअपनी पसंद दर्ज करें:1सम्मिलित किया जाने वाला तत्व दर्ज करें:10प्रविष्ट करने के लिए तत्व दर्ज करें:21.तालिका में तत्व डालें2. कुंजी से तत्व खोजें3.एक कुंजी पर तत्व हटाएं4.अपनी पसंद दर्ज करें:1सम्मिलित किया जाने वाला तत्व दर्ज करें:7कुंजी दर्ज करें जिस पर तत्व डाला जाना है:61.तालिका में तत्व डालें2.कुंजी से तत्व खोजें।एक कुंजी पर तत्व हटाएं4 अपनी पसंद दर्ज करें:1 डालने के लिए तत्व दर्ज करें:4 वह कुंजी दर्ज करें जिस पर तत्व डाला जाना है:51. तालिका में तत्व डालें 2. कुंजी से तत्व खोजें 3. कुंजी पर तत्व हटाएं 4। अपनी पसंद दर्ज करें:1 डाला जाने वाला तत्व दर्ज करें:12 कुंजी दर्ज करें जिस पर तत्व डाला जाना है:31. तालिका में तत्व डालें 2. कुंजी से तत्व खोजें 3. कुंजी पर तत्व हटाएं 4. अपनी पसंद दर्ज करें:15 सही विकल्प दर्ज करें 1. तालिका में तत्व डालें 2. कुंजी से तत्व खोजें 3. हटाएं एक key4.Exit पर तत्व अपनी पसंद दर्ज करें:1Enter तत्व डालने के लिए:15 कुंजी दर्ज करें जिस पर तत्व डाला जाना है:81. तालिका में तत्व डालें 2. कुंजी से तत्व खोजें 3. कुंजी पर तत्व हटाएं 4. अपनी पसंद दर्ज करें:2 खोजे जाने वाले तत्व की कुंजी दर्ज करें:6 कुंजी पर तत्व 6 :71. तालिका में तत्व डालें 2. कुंजी से तत्व खोजें 3. कुंजी पर तत्व हटाएं 4. अपनी पसंद दर्ज करें:3 हटाए जाने वाले तत्व की कुंजी दर्ज करें:21. तालिका में तत्व डालें 2. कुंजी से तत्व खोजें 3. हटाएं तत्व एक कुंजी पर 4। बाहर निकलें अपनी पसंद दर्ज करें:2 खोजे जाने वाले तत्व की कुंजी दर्ज करें:2 कुंजी 21 पर कोई तत्व नहीं मिला। पूर्व>