Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में ओपन एड्रेसिंग लीनियर प्रोबिंग के साथ खुद की हैश टेबल को लागू करना

हैश टेबल एक डेटा संरचना है जिसका उपयोग की-वैल्यू पेयर को स्टोर करने के लिए किया जाता है। हैश फ़ंक्शन का उपयोग हैश तालिका द्वारा किसी इंडेक्स को एक सरणी में गणना करने के लिए किया जाता है जिसमें एक तत्व डाला या खोजा जाएगा।

लीनियर प्रोबिंग ओपन एड्रेसेड हैश टेबल में एक टक्कर समाधान तकनीक है। इस पद्धति में, हैश तालिका का प्रत्येक सेल एक एकल कुंजी-मान युग्म संग्रहीत करता है। यदि हैश तालिका के एक सेल में एक नई कुंजी को मैप करके टकराव होता है जो पहले से ही किसी अन्य कुंजी द्वारा कब्जा कर लिया गया है। यह विधि निम्न निकटतम मुक्त स्थान के लिए तालिका की खोज करती है और वहां नई कुंजी सम्मिलित करती है।

यह लीनियर प्रोबिंग के साथ हैश टेबल्स को लागू करने के लिए एक C++ प्रोग्राम है।

एल्गोरिदम

शुरू करें डिक्लेयर फंक्शन इंसर्ट (इंट के, इंट वी) डिक्लेयर हैश_वैल, इनिट, डेलिंडेक्स टू इंटीजर पॉइंटर। इनिशियलाइज़ हैश_वल =हैशफंक (के) इनिशियलाइज़ इनिट =-1 इनिशियलाइज़ डेलिंडेक्स =-1 जबकि (हैश_वल! =इनिट और (एचटी [हैश_वल] ==डेलनोड ::गेटनोड () या एचटी [हैश_वल]! =न्यूल और एचटी [हैश_वल] -> k!=k)) अगर (init ==-1) init =hash_val if (ht[hash_val] ==DelNode::getNode ()) delindex =hash_val hash_val =HashFunc(hash_val + 1) if (ht[hash_val ] ==NULL या हैश_वल ==init) अगर (डिलिंडेक्स! =-1) एचटी [डेलिंडेक्स] =नया हैशटेबल (के, वी) और एचटी [हैश_वल] =नया हैशटेबल (के, वी) अगर (इनिट! =हैश_वल) अगर (एचटी [हैश_वल]! =डेलनोड ::गेटनोड ()) अगर (एचटी [हैश_वल]! =न्यूल) अगर (एचटी [हैश_वल] -> के ==के) एचटी [हैश_वल] -> वी =वी और एचटी [ हैश_वल] =नया हैशटेबल (के, वी) अंत।

खोज के लिए एक महत्वपूर्ण मान:

डिक्लेयर फंक्शन सर्चकी(int k) डिक्लेयर हैश_वैल, पूर्णांक डेटाटाइप का init। इनिशियलाइज़ हैश_वल =हैशफंक (के) इनिशियलाइज़ इनिट =-1 जबकि (हैश_वल! =इनिट और (एचटी [हैश_वल] ==डेलनोड ::गेटनोड () या एचटी [हैश_वल]! =न्यूल और एचटी [हैश_वल] -> के! =के अगर (init ==-1) init =हैश_वल हैश_वल =हैशफंक (हैश_वल + 1) अगर (एचटी [हैश_वल] ==न्यूल या हैश_वल ==इनिट) रिटर्न -1 और रिटर्न एचटी [हैश_वल] -> वीएंड। पूर्व> 

हटाने के लिए:

शुरू करें डिक्लेयर फंक्शन रिमूव (int k) डिक्लेयर हैश_वैल, इनिट ऑफ इंटीजर डेटाटाइप। हैश_वल =हैशफंक (के) प्रारंभ करें init =-1 जबकि (हैश_वल! =init और (एचटी [हैश_वल] ==डेलनोड ::getNode () या एचटी [हैश_वल]! =न्यूल और एचटी [हैश_वल] -> के! =के)) अगर (init ==-1) init =हैश_वल हैश_वल =हैशफंक (हैश_वल + 1) अगर (हैश_वल! =इनिट और एचटी [हैश_वल]! =न्यूल) एचटी [हैश_वल] एचटी [हैश_वल] =डेलनोड ::हटाएं:getNode()अंत।

उदाहरण कोड

#शामिल करें टी वी में; हैशटेबल (इंट के, इंट वी) {यह-> के =के; यह-> वी =वी; }};वर्ग DelNode:सार्वजनिक हैशटेबल {निजी:स्थिर DelNode *en; डेलनोड ():हैशटेबल (-1, -1) {} सार्वजनिक:स्थिर डेलनोड * गेटनोड () {अगर (एन ==न्यूल) एन =नया डेलनोड (); वापसी एन; }}; डेलनोड * डेलनोड ::एन =न्यूल; क्लास हैश मैपटेबल {निजी:हैशटेबल ** एचटी; सार्वजनिक:हैश मैपटेबल () {एचटी =नया हैशटेबल * [टी_एस]; के लिए (int i =0; i k !=k)) { अगर (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 पर कोई तत्व नहीं मिला। पूर्व> 
  1. सी ++ में उदाहरण के साथ अभिव्यक्ति वृक्ष

    एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री होता है जिसमें ट्री के प्रत्येक नोड में या तो एक ऑपरेटर या ऑपरेंड होता है। लीफ नोड्स पेड़ का एक संचालन . का प्रतिनिधित्व करता है . गैर-पत्ती नोड्स पेड़ का एक ऑपरेटर . का प्रतिनिधित्व करता है । उदाहरण: इंफिक्स एक्सप्रेशन प्राप्त करने के लिए जिस

  1. सी ++ में कुंजी के साथ क्रमपरिवर्तन पर प्रश्न

    मान लीजिए कि हमारे पास 1 और m के बीच सकारात्मक पूर्णांकों की एक सरणी क्वेरी है, हमें सभी प्रश्नों, प्रश्नों को संसाधित करना है [i] (i =0 से n तक, n प्रश्नों का आकार है -1) निम्नलिखित नियमों के अनुसार - शुरुआत में, हमारे पास क्रमचय P=[1,2,3,...,m] है। वर्तमान i के लिए, क्रमचय P (0 से अनुक्रमण)

  1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

    मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे