पायथन में ढेर डेटा संरचनाएं क्या हैं?



यह लेख आपको ढेर सारे उदाहरणों के साथ ढेर डेटा स्ट्रक्चर्स का विस्तृत और व्यापक ज्ञान प्रदान करेगा।

डेटा स्ट्रक्चर्स डेटा वैल्यूज़, उनके बीच के रिश्तों और उन फ़ंक्शंस या ऑपरेशंस का एक संग्रह है जो डेटा पर लागू हो सकते हैं। अब बहुत सारे डेटा स्ट्रक्चर्स उपलब्ध हैं। लेकिन आज हमारा ध्यान स्टैक डेटा स्ट्रक्चर्स पर होगा। मैं निम्नलिखित विषयों पर चर्चा करूंगा:

डेटा संरचनाएं क्यों?

इसका जवाब देने के लिए आपको बड़े स्तर पर सोचना होगा। सोचें कि Google मानचित्र आपको सेकंड के कुछ अंशों में सबसे अच्छा मार्ग कैसे दिखाता है, यह आपको माइक्रोसेकंड में खोज परिणाम कैसे देता है। यह केवल 100 वेबसाइटों के साथ सौदा नहीं करता है, यह एक अरब से अधिक साइटों से संबंधित है और फिर भी आपको इतनी जल्दी परिणाम दिखाता है।





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

डेटा संरचनाओं के प्रकार

कुछ मानक डेटा संरचनाएं हैं जिनका उपयोग कुशलता से डेटा के साथ काम करने के लिए किया जा सकता है। हम भी उन्हें अनुकूलित या हमारे आवेदन के अनुरूप पूरी तरह से नए निर्माण कर सकते हैं।



डेटा-संरचना प्रकार

स्टैक डेटा संरचना क्या है?

कुछ वास्तविक जीवन के उदाहरणों पर विचार करें:

जावास्क्रिप्ट अलर्ट डाउनलोड करने के लिए लॉगिन करें
  • माल में लदान
  • एक ट्रे पर चढ़ता है
  • सिक्कों का ढेर
  • दराज का ढेर
  • रेलवे यार्ड में ट्रेनों का शंटिंग

plates-stacks-data-structure



इन सभी उदाहरणों का अनुसरण किया जाता है सबसे अंतिम आने वाला सबसे पहले जाएगा रणनीति। एक ट्रे पर प्लेटों पर विचार करें, जब आप एक प्लेट चुनना चाहते हैं तो आपको ऊपर से एक प्लेट लेने के लिए मजबूर किया जाता है जब प्लेटों को ट्रे पर रखा जाता है तो उन्हें रिवर्स ऑर्डर में होना चाहिए। उपरोक्त उदाहरण जो अनुसरण करते हैं अंतिम-प्रथम-आउट (LIFO) सिद्धांत के रूप में जाना जाता है ढेर

पूरक परिचालनों के अलावा, मैं कह सकता हूं कि स्टैक पर मुख्य संचालन संभव हैं:

  1. स्टैक के शीर्ष पर एक तत्व धक्का या डालें
  2. स्टैक के शीर्ष से एक तत्व पॉप या निकालें

स्टैक डेटा संरचना बनाना

वर्ग स्टैक: def __init __ (स्व, मैक्स_साइज़): स्व .__ अधिकतम_साइज़ = अधिकतम_ स्व स्व तत्वों .__ तत्व = [कोई नहीं] * स्व। _ अधिकतम_स्वयं स्व .__ शीर्ष = -1
  • अधिकतम आकार स्टैक में अपेक्षित तत्वों की अधिकतम संख्या है।
  • ढेर के तत्व अजगर सूची में संग्रहीत हैं।
  • शीर्ष स्टैक के सबसे ऊपरी सूचकांक को इंगित करता है जो शुरू में -1 को खाली स्टैक को चिह्नित करने के लिए लिया जाता है।

स्टैक की प्रारंभिक स्थिति को चित्रा में देखा जा सकता है जहां max_size = 5

स्टैक में पुश तत्व

अब, यदि आप स्टैक में तत्व को दर्ज या पुश करना चाहते हैं, तो आपको यह याद रखना होगा

  • शीर्ष सूचकांक को इंगित करेगा, जिसमें तत्व डाला जाएगा।
  • और यह कि स्टैक पूरा होने पर कोई तत्व नहीं डाला जाएगा, जब max_size = top होगा।

तो एल्गोरिथ्म क्या होना चाहिए ??

# स्टैक डिफ की अधिकतम साइज रिटर्न get_max_size (सेल्फ): स्व वापस लौटें ।__ max_size # रिटर्न बूल वैल्यू चाहे स्टैक भरा हो या नहीं, ट्रू फुल और फाल्स अन्यथा डिफ is_full (सेल्फ): रिटर्न सेल्फ .get_max_size () - 1 == स्व .__ शीर्ष # स्टेप्स डिफ पुश के शीर्ष पर (स्व, डेटा) तत्व: यदि (self.is_full ()): प्रिंट ('स्टैक पहले से ही भरा हुआ है') तो: स्वयं .__ शीर्ष = स्व .__ शीर्ष + इंट (1) ) स्व .__ तत्व [स्व। _ शीर्ष] = डेटा # आप डीएस ऑब्जेक्ट के तत्वों को प्रिंट करने के लिए __str __ (स्व) को डिबग करते हुए नीचे __str __ () का उपयोग कर सकते हैं: msg = [] इंडेक्स = स्व। _ जबकि (इंडेक्स> =)। 0): msg.append ((str) (स्वयं .__ तत्व [सूचकांक])) index- = 1 msg = '' .join (msg) संदेश = 'स्टैक डेटा (ऊपर से नीचे):' + msg वापसी संदेश

अब, जब आप निम्नलिखित कार्य करते हैं:

स्टैक 1 = स्टैक (4)

# सभी आवश्यक तत्व जमा करें।

stack1.push ('ए')

stack1.push ('B')

stack1.push ('C')

stack1.push ('ई')

प्रिंट (stack1.is_full ())

प्रिंट (स्टैक 1)

आउटपुट:

स्टैक पहले से ही भरा हुआ है
सच
स्टैक डेटा (ऊपर से नीचे): डी सी बी ए

स्टैक से पॉप तत्व

अब, जैसा कि आपने तत्वों को स्टैक में डाला है, आप उन्हें पॉप करना चाहते हैं, इसलिए आपको निम्नलिखित बातों का ध्यान रखना चाहिए:

  • स्टैक खाली नहीं है यानी टॉप! = -1
  • जब आप डेटा हटाते हैं, तो शीर्ष को स्टैक के पिछले शीर्ष पर इंगित करना चाहिए।

तो, एल्गोरिथ्म क्या होगा ??

#returns बूल वैल्यू चाहे स्टैक खाली हो या न हो, ट्रू खाली और गलत है या नहीं, तो डिफ़_empty (सेल्फ: रिटर्न सेल्फ .__ टॉप == - - 1 # ग्रेटर्न पॉप्ड वैल्यू डीईएफ़ पॉप पॉप (सेल्फ): इफ (सेल्फिस_मेज़ खाली) (): प्रिंट ('कुछ भी नहीं पॉप करने के लिए, पहले से ही खाली'): a = स्वयं .__ तत्व [स्वयं .__ शीर्ष] स्व। शीर्ष। आत्म = .__ शीर्ष -1 एक #display को वापस ऊपर से नीचे प्रदर्शन प्रदर्शन (स्व) के लिए सभी स्टैक तत्वों को वापस करें: मैं सीमा में (स्व .__ शीर्ष, -1, -1): प्रिंट (स्व। लि। तत्व [i], अंत = '' प्रिंट) ()

अब, पहले से निर्मित स्टैक को देखते हुए, तत्वों को पॉप करने का प्रयास करें

प्रिंट (stack1.pop ())

प्रिंट (stack1.pop ())

प्रिंट (स्टैक 1)

प्रिंट (stack1.pop ())

प्रिंट (stack1.pop ())

प्रिंट (stack1.pop ())

आउटपुट:

डी

सी

स्टैक डेटा (ऊपर से नीचे): बी ए

बी

सेवा मेरे

पॉप के लिए कुछ भी नहीं, पहले से ही खाली है

स्टैक डेटा संरचना के अनुप्रयोग

  • उदाहरण 1:

एक स्टैक का उपयोग अंकगणितीय अभिव्यक्ति मूल्यांकन के लिए ब्रैकेट मिलान एल्गोरिथ्म को लागू करने के लिए किया जाता है और विधि कॉल के कार्यान्वयन में भी किया जाता है।

जिसका उत्तर 5 है।

  • उदाहरण 2:

विंडोज में क्लिपबोर्ड पूर्ववत करने के लिए दो चरणों का उपयोग करता है (ctrl + z, ctrl + y) संचालन। आपने विंडोज वर्ड एडिटर्स जैसे MS-Word, Notepad, आदि पर काम किया होगा। यहाँ MS-Word में एक टेक्स्ट लिखा गया है। यह देखें कि Ctrl-Z और Ctrl-Y के क्लिक पर टेक्स्ट कैसे बदल गया।

यहां एक कोड है जो पूर्ववत करें-संचालन को अनुकरण करता है। कोड के माध्यम से जाएं और देखें कि इस कार्यान्वयन में स्टैक का उपयोग कैसे किया जाता है।

# क्रेटिंग क्लास स्टैक क्लास स्टैक: डिफ __init __ (सेल्फ, मैक्स_साइज): स्व। self .__ max_size-1): रिटर्न ट्रू रिटर्न गलत डिफेंस is_empty (सेल्फ): अगर (सेल्फ .__ टॉप == - 1): रिटर्न ट्रू रिटर्न फाल्स डिफ पुश (सेल्फ, डेटा): इफ (सेल्फिस) और (स्व) ('स्टैक भरा हुआ है !!') बाकी: self .__ top + = 1 self .__ एलिमेंट्स [self .__ टॉप] = data def pop (सेल्फ): if (self.is_empty ()): प्रिंट ('स्टैक खाली है! ! ') बाकी: डेटा = स्व। लि। तत्व [स्वयं .__ शीर्ष] स्व .__ शीर्ष- = 1 रिटर्न डेटा डिफ डिस्प्ले (स्व): अगर (स्व .is_empty ()): प्रिंट (' स्टैक खाली है ') अन्य: सूचकांक = स्वयं .__ शीर्ष जबकि (इंडेक्स> = 0): प्रिंट (स्व। लि। तत्व [इंडेक्स]) इंडेक्स- = १ डिफ गेट_मैक्स_साइज (सेल्फ): सेल्फ स्व .__ मैक्स_साइज # आप तत्वों के तत्वों को प्रिंट करने के लिए नीचे __str__ () का उपयोग कर सकते हैं। डीएस ऑब्जेक्ट डिबगिंग करते समय __str __ (स्व): msg = [] index = self .__ टॉप जबकि (इंडेक्स> = 0): msg.append ((str) (self .__ एलिमेंट्स [इंडेक्स])) index- = 1 msg = '.join (संदेश) संदेश =' ढेर डेटा (ऊपर से नीचे): '+ संदेश वापस एमएस g #function हटाने या बैकस्पेस ऑपरेशन डिफ रिमूवल लागू करने के लिए (): ग्लोबल क्लिपबोर्ड, undo_stack डेटा = क्लिपबोर्ड [len (क्लिपबोर्ड) -1] क्लिपबोर्ड .remove (डेटा) undo_stack.push (डेटा प्रिंट) ('निकालें:', क्लिपबोर्ड) पूर्ववत कार्रवाई को लागू करने के लिए #function को पूर्ववत करें (): वैश्विक क्लिपबोर्ड, undo_stack, redo_stack यदि (undo_stack.is_empty ()): प्रिंट ('पूर्ववत करने के लिए कोई डेटा नहीं है'): data = undo_stack.pop () क्लिपबोर्ड.append () data) redo_stack.push (data) प्रिंट ('Undo:', क्लिपबोर्ड) #function को फिर से लागू करने के लिए redo ऑपरेशन def redo (): ग्लोबल क्लिपबोर्ड, undo_stack, redo_stack अगर (redo_stack.is_empty ()): print ('कोई डेटा नहीं है) को फिर से करें): डेटा = redo_stack.pop () अगर (डेटा क्लिपबोर्ड में नहीं है): प्रिंट ('कोई डेटा फिर से करने के लिए नहीं है)' redo_stack.push (डेटा) और: क्लिपबोर्ड .remove (डेटा) undo_stack.push ( डेटा) प्रिंट ('Redo:', क्लिपबोर्ड) क्लिपबोर्ड = ['ए', 'बी', 'सी', 'डी', 'ई', 'एफ'] अनडूस्टैक = स्टैक (लेन (क्लिपबोर्ड)) redo_stack = Stack (लेन (क्लिपबोर्ड)) हटाएं () पूर्ववत करें () फिर से करें ()

आउटपुट:

निकालें: [: A ’,’ B ’,, C’,, D ’,’ E ’]

पूर्ववत करें: [‘A’,: B ’,, C’,, D ’,’ E ’,‘ F ’]

Redo: [’A ',: B',, C ',, D',’ E ']

इसके साथ, हम पायथन लेख में इस स्टैक डेटा संरचना के अंत में आते हैं। यदि आप सफलतापूर्वक समझ गए हैं और अपने आप से कोड्स को चलाया है तो आप स्टैक्स डेटा स्ट्रक्चर के लिए एक नौसिखिया नहीं हैं।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस लेख के टिप्पणी अनुभाग में इसका उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।

अपने विभिन्न अनुप्रयोगों के साथ अजगर पर गहराई से ज्ञान प्राप्त करने के लिए, आप लाइव के लिए नामांकन कर सकते हैं 24/7 समर्थन और आजीवन पहुंच के साथ।