स्टैक एक लीनियर डेटा स्ट्रक्चर है जो लास्ट इन फर्स्ट आउट मैकेनिज्म (LIFO) पर काम करता है। जो एलिमेंट स्टैक में पहले प्रवेश करता है वह अंतिम प्रोसेस होता है।
उदाहरण
स्टैक डेटा स्ट्रक्चर को व्यंजनों के स्टैक के उदाहरण से समझा जा सकता है।
व्यंजनों को एक के ऊपर एक ढेर किया जाता है। पहली प्लेट या डिश ढेर के नीचे होती है और अंतिम रखा गया डिश ढेर या स्टैक के शीर्ष पर होता है। जब भी हमें प्लेट की आवश्यकता होती है, हम स्टैक के शीर्ष पर प्लेट उठाएंगे जो अंतिम में रखी गई प्लेट है। जो प्लेट पहले रखी गई थी वह अंतिम में उठाई जाएगी। इस प्रकार, लास्ट इन फर्स्ट आउट मैकेनिज्म का पालन किया जाता है।
पायथन में स्टैक का कार्यान्वयन
पायथन में स्टैक को अन्य लीनियर डेटा स्ट्रक्चर्स या पायथन लाइब्रेरी में इनबिल्ट मॉड्यूल्स का उपयोग करके विभिन्न तरीकों से इम्प्लीमेंट किया जा सकता है।
मेथड 1 - लिस्ट का उपयोग करके इम्प्लीमेंट करें
पायथन में स्टैक को लिस्ट का उपयोग करके इम्प्लीमेंट किया जा सकता है। लेकिन, स्टैक इम्प्लीमेंट करने के लिए लिस्ट का उपयोग करना बहुत कुशल नहीं है और इसलिए अनुशंसित नहीं है।
शामिल ऑपरेशन्स
append() - यह फंक्शन स्टैक के अंत में एक एलिमेंट जोड़ता है।
pop() - यह फंक्शन स्टैक में अंतिम या शीर्ष एलिमेंट को हटाता है और वापस करता है। यह फंक्शन LIFO ऑर्डर में एलिमेंट्स को पॉप करता है।
उदाहरण
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print("Initial Stack", stack)
print("Element popped from the stack")
print(stack.pop())
print(stack.pop())
print("Stack after popping some elements", stack)
आउटपुट
Initial Stack [1, 2, 3]
Element popped from the stack
3
2
Stack after popping some elements [1]
एक बार स्टैक खाली हो जाने पर आप अधिक एलिमेंट्स नहीं हटा सकते। ऐसा करने पर एक्सेप्शन होता है।
stack.pop()
IndexError: pop from empty list
मेथड 2 - queue.LifoQueue का उपयोग करके इम्प्लीमेंट करें
यह पायथन से इनबिल्ट मॉड्यूल का उपयोग करके स्टैक इम्प्लीमेंट करने का तरीका है। हमें queue से LifoQueue इम्पोर्ट करने की आवश्यकता है। हम LifoQueue या स्टैक को कुछ विशिष्ट आकार के साथ इनिशियलाइज़ कर सकते हैं। शून्य आकार का अर्थ अनंत स्टैक है।
शामिल ऑपरेशन्स
maxsize - स्टैक में अनुमत एलिमेंट्स की अधिकतम संख्या
get() - स्टैक से अंतिम या शीर्ष एलिमेंट को हटाता है और वापस करता है। यदि स्टैक खाली है, तो तब तक प्रतीक्षा करें जब तक स्टैक में कम से कम एक एलिमेंट न हो।
get_nowait() - स्टैक से अंतिम एलिमेंट को हटाता है और वापस करता है। यदि स्टैक खाली है, तो एक्सेप्शन उठाएं।
put(item) - स्टैक के अंत में एक एलिमेंट जोड़ता है। यदि स्टैक भरा हुआ है, तो तब तक प्रतीक्षा करें जब तक फ्री स्लॉट उपलब्ध न हो।
put_nowait(item) - स्टैक के अंत में एक एलिमेंट जोड़ता है। यदि स्टैक भरा हुआ है, तो एक्सेप्शन उठाएं।
full() - यदि स्टैक भरा हुआ है तो True वापस करता है, अन्यथा False।
empty() - यदि स्टैक खाली है तो True वापस करता है, अन्यथा False।
qsize() - स्टैक में मौजूद एलिमेंट्स की संख्या वापस करता है।
उदाहरण
from queue import LifoQueue
s = LifoQueue(maxsize=3)
s.put(1)
s.put(2)
s.put(3)
print("Is stack full", s.full())
print("Element popped from the stack")
print(s.get())
print(s.get())
print("Number of elements in stack", s.qsize())
print("Is stack empty", s.empty())
आउटपुट
Is stack full True
Element popped from the stack
3
2
Number of elements in stack 1
Is stack empty False
मेथड 3: collections.deque का उपयोग करके इम्प्लीमेंट करें
यह पायथन में स्टैक इम्प्लीमेंट करने का एक और तरीका है। हमें collections मॉड्यूल से deque इम्पोर्ट करने की आवश्यकता है।
शामिल ऑपरेशन्स
append() - यह फंक्शन स्टैक के अंत में एक एलिमेंट जोड़ता है।
pop() - यह फंक्शन O(1) टाइम कॉम्प्लेक्सिटी में स्टैक में अंतिम एलिमेंट को हटाता है और वापस करता है।
उदाहरण
from collections import deque
stack = deque()
stack.append(1)
stack.append(2)
stack.append(3)
print("Initial stack:", stack)
print("Element popped from the stack")
print(stack.pop())
print(stack.pop())
print("Stack after popping some elements:", stack)
आउटपुट
Initial stack: deque([1, 2, 3])
Element popped from the stack
3
2
Stack after popping some elements: deque([1])
खाली deque पर pop() फंक्शन का उपयोग करने पर एक्सेप्शन उठेगा।