स्टैक एक सरल रैखिक डेटा संरचना है जो प्लेटों के ढेर की तरह काम करती है ?️। यह लास्ट इन, फर्स्ट आउट (LIFO) सिद्धांत का पालन करता है। इसे प्लेटों के ढेर के रूप में सोचें: आप केवल ढेर के ऊपर से प्लेटें जोड़ या हटा सकते हैं।
स्टैक की बेहतर समझ के लिए, आइए कल्पना की एक छोटी यात्रा शुरू करें?.
कल्पना कीजिए कि आप एक फैंसी रेस्तरां में हैं ?️, और रसोई कर्मचारी एक व्यस्त रात के लिए तैयारी कर रहे हैं ??? डिश क्षेत्र में, प्लेटों का एक लंबा ढेर उपयोग की प्रतीक्षा में है। जैसे ही भोजन करने वाले आते हैं और ऑर्डर आने लगते हैं, कर्मचारी ढेर के ऊपर से प्लेटें ले लेते हैं। जब साफ प्लेटें जोड़ी जाती हैं, तो वे ठीक ऊपर चली जाती हैं। यह सरल प्रणाली यह सुनिश्चित करती है कि स्टैक के नीचे की प्लेटें जो सबसे लंबे समय से वहां मौजूद हैं, उनका उपयोग सबसे अंत में किया जाता है, जबकि शीर्ष पर ताजा साफ की गई प्लेटों का उपयोग पहले किया जाता है ✨।
यह, संक्षेप में, स्टैक डेटा संरचना कैसे काम करती है। स्टैक एक रैखिक डेटा संरचना है जो लास्ट इन फ़र्स्ट आउट (LIFO) सिद्धांत का पालन करती है। ठीक हमारी प्लेटों के ढेर की तरह, स्टैक में जोड़ा गया अंतिम आइटम हटाया जाने वाला पहला आइटम होता है।
स्टैक डेटा संरचना पर इस व्यापक ट्यूटोरियल में, हम एक सरल, शुरुआती-अनुकूल दृष्टिकोण के साथ निम्नलिखित विषयों का पता लगाएंगे:
क्या आप तैयार हैं? आइए इसमें गोता लगाएँ
स्टैक एक रैखिक डेटा संरचना है जो लास्ट इन, फर्स्ट आउट (LIFO) सिद्धांत का पालन करती है। इसका मतलब यह है कि स्टैक में जोड़ा गया अंतिम तत्व हटाया जाने वाला पहला तत्व होगा। इसे किताबों के ढेर की तरह समझें: आप किताबों को केवल ढेर के ऊपर से जोड़ या हटा सकते हैं।
इससे पहले कि हम प्रवाह जारी रखें और कुछ कोड लिखें, यह समझना बहुत अच्छा है कि स्टैक का उपयोग कहां और कहां नहीं करना है। नीचे दी गई तालिका में स्टैक के स्पष्ट फायदे और नुकसान का विवरण दिया गया है।
पेशेवर | दोष |
---|---|
सरल और कार्यान्वयन में आसान | सीमित पहुंच (केवल शीर्ष तत्व सीधे पहुंच योग्य है) |
लास्ट-इन-फर्स्ट-आउट (LIFO) संचालन के लिए कुशल | तत्वों की यादृच्छिक पहुंच के लिए उपयुक्त नहीं है |
पुश और पॉप संचालन के लिए लगातार समय O(1) | अगर ठीक से प्रबंधित नहीं किया गया तो स्टैक ओवरफ्लो हो सकता है |
एल्गोरिदम में ट्रैकिंग स्थिति के लिए उपयोगी (उदाहरण के लिए, गहराई-पहली खोज) | मनमाने तत्वों को खोजने या उन तक पहुंचने के लिए आदर्श नहीं है |
मेमोरी प्रबंधन में मदद करता है (उदाहरण के लिए, प्रोग्रामिंग भाषाओं में कॉल स्टैक) | कुछ कार्यान्वयन में निश्चित आकार (सरणी-आधारित स्टैक) |
डेटा रिवर्स करने के लिए उपयोगी | गतिशील कार्यान्वयन में आकार बदलने की आवश्यकता हो सकती है, जो महंगा हो सकता है |
प्राकृतिक रूप से पुनरावर्ती एल्गोरिदम का समर्थन करता है | बड़े डेटासेट के लिए कुशल नहीं है जिसके लिए बार-बार ट्रैवर्सल की आवश्यकता होती है |
अभिव्यक्ति मूल्यांकन और वाक्यविन्यास पार्सिंग में मदद करता है | यदि पॉप ऑपरेशन को खाली स्टैक पर बुलाया जाता है तो अंडरफ़्लो की संभावना है |
सॉफ्टवेयर में पूर्ववत तंत्र में उपयोगी | अधिक जटिल डेटा संरचनाओं की तुलना में सीमित कार्यक्षमता |
कुछ प्रकार के डेटा संगठन (उदाहरण के लिए, ब्राउज़र इतिहास) के लिए कुशल | क्यू-लाइक (फीफो) व्यवहार की आवश्यकता वाली समस्याओं के लिए उपयुक्त नहीं है |
स्टैक पर किए जा सकने वाले मूलभूत ऑपरेशन हैं:
कंप्यूटर विज्ञान और सॉफ्टवेयर विकास में स्टैक हर जगह मौजूद हैं। यहां कुछ सामान्य अनुप्रयोग दिए गए हैं:
कार्यशीलता पूर्ववत करें: टेक्स्ट संपादकों या ग्राफ़िक डिज़ाइन सॉफ़्टवेयर में, प्रत्येक क्रिया को एक स्टैक पर धकेल दिया जाता है। जब आप "पूर्ववत करें" दबाते हैं, तो सबसे हालिया कार्रवाई स्टैक से हट जाती है और उलट जाती है।
ब्राउज़र इतिहास: जब आप किसी नए पृष्ठ पर जाते हैं, तो इसे एक स्टैक पर धकेल दिया जाता है। "वापस" बटन वर्तमान पृष्ठ को स्टैक से हटा देता है, और पिछला पृष्ठ प्रकट कर देता है।
फ़ंक्शन कॉल स्टैक: प्रोग्रामिंग भाषाओं में, फ़ंक्शन कॉल को स्टैक का उपयोग करके प्रबंधित किया जाता है। जब कोई फ़ंक्शन कॉल किया जाता है, तो इसे कॉल स्टैक पर धकेल दिया जाता है। जब यह वापस आता है, तो यह बंद हो जाता है।
अभिव्यक्ति मूल्यांकन: अंकगणितीय अभिव्यक्तियों का मूल्यांकन करने के लिए स्टैक का उपयोग किया जाता है, विशेष रूप से पोस्टफिक्स नोटेशन में।
बैकट्रैकिंग एल्गोरिदम: भूलभुलैया-सुलझाने या पहेली-सुलझाने जैसी समस्याओं में, स्टैक उठाए गए पथ का ट्रैक रख सकते हैं, जिससे जरूरत पड़ने पर आसानी से बैकट्रैकिंग की अनुमति मिलती है।
अब, आइए जावास्क्रिप्ट में एक स्टैक लागू करें। यह जानना महत्वपूर्ण है कि जावास्क्रिप्ट में स्टैक को लागू करने के विभिन्न तरीके हैं। स्टैक को लागू करने के सामान्य तरीकों में से एक ऐरे का उपयोग करना है, दूसरा तरीका लिंक्ड सूची का उपयोग करना है। इस लेख में, हम लिंक्ड सूची (एकल लिंक्ड सूची) का उपयोग करके एक स्टैक लागू करेंगे।
मुझे आशा है कि आपको अभी भी याद होगा कि लिंक्ड सूची कैसे काम करती है? आपको इसी श्रृंखला में हमारे पिछले लेखों में से एक में लिंक की गई सूची कार्यान्वयन की जांच करने की आवश्यकता हो सकती है।
अब, आइए एकल लिंक्ड सूची का उपयोग करके अपने स्टैक को कार्यान्वित करना शुरू करें। क्या हम?
सबसे पहले, हम अपने स्टैक व्यक्तिगत आइटम का प्रतिनिधित्व करने के लिए एक नोड क्लास बनाएंगे।
class Node { constructor(data) { this.data = data; this.next = null; } }
फिर, हम अपने स्टैक का प्रतिनिधित्व करने के लिए एक स्टैक क्लास बनाएंगे।
class Stack { constructor() { this.top = null; this.size = 0; } // Stack Operations will be implemented here ? }
पुश ऑपरेशन स्टैक के शीर्ष पर एक नया तत्व जोड़ता है। यह एक नया स्टैकनोड बनाता है, इसके अगले पॉइंटर को वर्तमान शीर्ष पर सेट करता है, और फिर इस नए नोड को इंगित करने के लिए शीर्ष को अपडेट करता है। अंततः, यह आकार बढ़ाता है।
// Push element to the top of the stack push(element) { const newNode = new Node(element); newNode.next = this.top; this.top = newNode; this.size ; }
पॉप ऑपरेशन स्टैक से सबसे ऊपरी तत्व को हटा देता है। यह पहले जाँचता है कि स्टैक खाली है या नहीं। यदि ऐसा है, तो यह एक त्रुटि संदेश देता है। अन्यथा, यह शीर्ष तत्व को हटा देता है, शीर्ष सूचक को अगले नोड में अद्यतन करता है, और आकार घटा देता है। अंत में, यह हटाए गए तत्व को वापस कर देता है।
// Remove and return the top element pop() { if (this.isEmpty()) { return "Stack is empty"; } const poppedElement = this.top.data; this.top = this.top.next; this.size--; return poppedElement; }
पीक ऑपरेशन शीर्ष तत्व को हटाए बिना लौटाता है। यह पहले जाँचता है कि स्टैक खाली है या नहीं। यदि ऐसा है, तो यह एक त्रुटि संदेश देता है। अन्यथा, यह शीर्ष तत्व का डेटा लौटाता है।
// Return the top element without removing it peek() { if (this.isEmpty()) { return "Stack is empty"; } return this.top.data; }
isEmpty ऑपरेशन जांच करता है कि स्टैक खाली है या नहीं। यदि स्टैक खाली है तो यह सत्य है, अन्यथा गलत है।
// Check if the stack is empty isEmpty() { return this.size === 0; }
गेटसाइज ऑपरेशन स्टैक का आकार लौटाता है। यह स्टैक में तत्वों की संख्या लौटाता है।
// Return the size of the stack getSize() { return this.size; }
प्रिंट ऑपरेशन स्टैक को प्रिंट करता है। यह शीर्ष तत्व का डेटा लौटाता है।
// Print the stack print() { let current = this.top; let result = ""; while (current) { result = current.data " "; current = current.next; } console.log(result.trim()); }
// Usage example const customStack = new CustomStack(); customStack.push(10); customStack.push(20); customStack.push(30); console.log(customStack.pop()); // 30 console.log(customStack.peek()); // 20 console.log(customStack.getSize()); // 2 console.log(customStack.isEmpty()); // false customStack.print(); // 20 10
इस कार्यान्वयन में, हमने अपने स्टैक का प्रतिनिधित्व करने के लिए एक लिंक्ड सूची (अकेले लिंक की गई सूची) संरचना का उपयोग किया। प्रत्येक तत्व डेटा मान और अगले नोड के संदर्भ के साथ एक नोड है। स्टैक का शीर्ष हमेशा सबसे हाल ही में जोड़ा गया नोड होता है।
स्टैक कंप्यूटर विज्ञान में एक मौलिक डेटा संरचना है जो लास्ट इन, फर्स्ट आउट (LIFO) सिद्धांत का पालन करती है। इनका उपयोग विभिन्न अनुप्रयोगों में किया जाता है, जिसमें फ़ंक्शन कॉल प्रबंधित करना, पूर्ववत कार्यक्षमता लागू करना और अंकगणितीय अभिव्यक्तियों का मूल्यांकन करना शामिल है।
इस ट्यूटोरियल में, हमने स्टैक की मूल बातें, उनका उपयोग करने के फायदे और नुकसान, और जावास्क्रिप्ट में उनके कार्यान्वयन (लिंक्ड सूची का उपयोग करके) को कवर किया है। स्टैक को समझना केवल यह जानना नहीं है कि उन्हें कैसे लागू किया जाए, बल्कि यह पहचानना भी है कि वे किसी समस्या को हल करने के लिए सही उपकरण हैं।
जैसे-जैसे आप सॉफ़्टवेयर विकास में अपनी यात्रा जारी रखेंगे, आप पाएंगे कि स्टैक आपकी समस्या-समाधान टूलकिट में एक अनिवार्य उपकरण है। वे सरल लेकिन शक्तिशाली हैं, और उनमें महारत हासिल करने से कुशल एल्गोरिदम और डेटा संरचनाओं को डिजाइन करने की आपकी क्षमता में काफी वृद्धि होगी।
यह सुनिश्चित करने के लिए कि आप इस श्रृंखला का कोई भी हिस्सा न चूकें और सॉफ्टवेयर विकास (वेब, सर्वर, मोबाइल या स्क्रैपिंग/ऑटोमेशन), डेटा संरचनाओं और एल्गोरिदम, और अन्य रोमांचक तकनीक पर अधिक गहन चर्चा के लिए मेरे साथ जुड़ें। विषय, मेरा अनुसरण करें:
बने रहें और खुश रहें कोडिंग ???
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3