🔬
🧬
🔭
🪐
🧪
← डैशबोर्ड पर वापस जाएँ
Font Size:

1. परिचय

स्टैक (Stack) एक रैखिक डेटा संरचना है जिसमें डेटा का प्रवेश और निष्कासन एक ही सिरे से होता है, जिसे शीर्ष (Top) कहा जाता है। स्टैक LIFO (Last In, First Out) सिद्धांत पर कार्य करता है, अर्थात जो तत्व सबसे अंत में जोड़ा जाता है वही सबसे पहले निकाला जाता है। इसे समझने के लिए हम भोजन की प्लेटों के ढेर (stack of plates) का उदाहरण ले सकते हैं - सबसे ऊपर रखी प्लेट ही सबसे पहले उठाई जाती है। स्टैक का उपयोग कई क्षेत्रों में होता है, जैसे फंक्शन कॉल का प्रबंधन (recursion में), उल्टा पठन (reversing), ब्रैकेट संतुलन की जाँच, एडिटर में undo/redo ऑपरेशन आदि।

स्टैक में सभी मुख्य ऑपरेशन स्थिरांक समय (O(1)) में संपन्न होते हैं, क्योंकि हम केवल शीर्ष तत्व के साथ कार्य करते हैं। इस अध्याय में हम स्टैक की अवधारणा, उसके मुख्य ऑपरेशन, सूची का उपयोग करके स्टैक का कार्यान्वयन, और उसके अनुप्रयोगों को विस्तार से समझेंगे।

2. स्टैक की मूल अवधारणाएँ (Basic Concepts)

स्टैक को समझने के लिए कुछ मुख्य शब्दों को जानना आवश्यक है:

स्टैक की विशेषताएँ:

  1. यह एक रैखिक डेटा संरचना है।
  2. इसमें डेटा का सम्मिलन और विलोपन केवल एक सिरे (शीर्ष) से होता है।
  3. यह LIFO सिद्धांत का पालन करता है।
  4. सभी मुख्य ऑपरेशन O(1) समय में संपन्न होते हैं।

3. स्टैक के मुख्य ऑपरेशन (Operations on Stack)

3.1 Push ऑपरेशन

Push ऑपरेशन स्टैक के शीर्ष पर एक नया तत्व जोड़ता है। इससे पहले स्टैक भरा हुआ तो नहीं है, यह जाँचना आवश्यक है।

def push(stack, element):
    stack.append(element)
    print(element, "स्टैक में जुड़ा")

यहाँ हमने सूची की append() विधि का उपयोग किया है, जो तत्व को सूची के अंत में जोड़ती है, जो स्टैक का शीर्ष है।

3.2 Pop ऑपरेशन

Pop ऑपरेशन स्टैक के शीर्ष तत्व को निकालता है और उसे लौटाता है। यदि स्टैक खाली है तो यह underflow की स्थिति उत्पन्न करता है।

def pop(stack):
    if is_empty(stack):
        print("स्टैक खाली है (Underflow)")
        return None
    return stack.pop()

3.3 Peek ऑपरेशन

Peek ऑपरेशन शीर्ष तत्व को हटाए बिना उसकी जानकारी देता है:

def peek(stack):
    if is_empty(stack):
        print("स्टैक खाली है")
        return None
    return stack[-1]

3.4 अन्य सहायक ऑपरेशन

def is_empty(stack):
    return len(stack) == 0

def size(stack):
    return len(stack)

def display(stack):
    print("स्टैक (शीर्ष से नीचे):", stack[::-1])

4. सूची (List) का उपयोग करके स्टैक का कार्यान्वयन

पाइथन में स्टैक को सूची (list) की सहायता से सरलता से कार्यान्वित किया जा सकता है। सूची के अंत में जोड़ने के लिए append() और अंत से निकालने के लिए pop() का उपयोग किया जाता है। पूर्ण कार्यान्वयन निम्नलिखित है:

stack = []

def push(stack, element):
    stack.append(element)
    print(element, "पुश किया गया")

def pop(stack):
    if not stack:
        print("स्टैक खाली है - Underflow")
        return None
    return stack.pop()

def display(stack):
    if not stack:
        print("स्टैक खाली है")
    else:
        print("स्टैक के तत्व (नीचे से ऊपर):", stack)

push(stack, 10)
push(stack, 20)
push(stack, 30)
print(pop(stack))    # 30
print(pop(stack))    # 20
display(stack)       # [10]

उदाहरण: इनफिक्स अभिव्यक्ति में ब्रैकेट संतुलन

def is_balanced(expr):
    stack = []
    for ch in expr:
        if ch in "([{":
            stack.append(ch)
        elif ch in ")]}":
            if not stack:
                return False
            top = stack.pop()
            if not matching(top, ch):
                return False
    return len(stack) == 0

5. स्टैक के अनुप्रयोग (Applications of Stack)

स्टैक का उपयोग कंप्यूटर विज्ञान में अनेक स्थानों पर किया जाता है:

  1. फंक्शन कॉल प्रबंधन (Recursion): जब भी कोई फलन कॉल किया जाता है, उसका संदर्भ (activation record) सिस्टम स्टैक पर दबाया जाता है और फलन लौटने पर निकाला जाता है।
  2. Undo/Redo ऑपरेशन: वर्ड प्रोसेसर में अंतिम क्रिया को पूर्ववत (undo) करने के लिए स्टैक का उपयोग होता है।
  3. अभिव्यक्ति का मूल्यांकन: इनफिक्स, प्रीफिक्स और पोस्टफिक्स अभिव्यक्तियों का मूल्यांकन स्टैक द्वारा किया जाता है।
  4. ब्रैकेट संतुलन की जाँच: प्रोग्रामिंग में कोष्ठकों के संतुलन की जाँच स्टैक से होती है।
  5. उल्टा क्रम (Reversal): स्ट्रिंग या सूची के तत्वों को उल्टे क्रम में प्राप्त करने के लिए स्टैक उपयोगी है।
  6. वेब ब्राउज़र का बैक बटन: पिछले पृष्ठ की यात्रा का इतिहास स्टैक में संग्रहीत होता है।

6. अभिव्यक्ति का मूल्यांकन (Expression Evaluation)

स्टैक की सहायता से पोस्टफिक्स अभिव्यक्ति का मूल्यांकन निम्नलिखित नियमों से किया जाता है:

  1. अभिव्यक्ति में बाएँ से दाएँ प्रत्येक चिह्न को पढ़ें।
  2. यदि चिह्न ऑपरेंड है तो उसे स्टैक में पुश करें।
  3. यदि चिह्न ऑपरेटर है तो स्टैक से दो ऑपरेंड निकालें, ऑपरेशन करें और परिणाम को स्टैक में पुश करें।
  4. अंत में स्टैक में शेष एकमात्र तत्व ही उत्तर होता है।

उदाहरण: पोस्टफिक्स अभिव्यक्ति 23+5* का मूल्यांकन करें।

पढ़ें 2 → पुश(2),  पढ़ें 3 → पुश(3)
पढ़ें + → 3+2=5, पुश(5)
पढ़ें 5 → पुश(5)
पढ़ें * → 5*5=25
उत्तर = 25

पोस्टफिक्स मूल्यांकन का पाइथन कोड:

def eval_postfix(expr):
    stack = []
    for token in expr.split():
        if token.isdigit():
            stack.append(int(token))
        else:
            b = stack.pop()
            a = stack.pop()
            if token == '+':
                stack.append(a + b)
            elif token == '-':
                stack.append(a - b)
            elif token == '*':
                stack.append(a * b)
            elif token == '/':
                stack.append(a / b)
    return stack.pop()

त्वरित पुनरावृत्ति तालिकाएँ

स्टैक के मुख्य ऑपरेशन

ऑपरेशन कार्य समय जटिलता
Push तत्व जोड़ना O(1)
Pop तत्व निकालना O(1)
Peek/Top शीर्ष तत्व देखना O(1)
isEmpty स्टैक खाली है या नहीं O(1)
Size तत्वों की संख्या O(1)

स्टैक बनाम क्यू

विशेषता स्टैक क्यू
सिद्धांत LIFO FIFO
सम्मिलन सिरा शीर्ष पीछे (Rear)
विलोपन सिरा शीर्ष सामने (Front)
उदाहरण प्लेटों का ढेर टिकट काउंटर की कतार

माइंड मैप

flowchart TD A["स्टैक"] --> B["सिद्धांत: LIFO"] A --> C["मुख्य ऑपरेशन"] A --> D["कार्यान्वयन"] A --> E["अनुप्रयोग"] C --> C1["Push - जोड़ना"] C --> C2["Pop - निकालना"] C --> C3["Peek - देखना"] D --> D1["सूची (list) द्वारा"] D --> D2["append() और pop()"] E --> E1["रिकर्शन"] E --> E2["Undo/Redo"] E --> E3["पोस्टफिक्स मूल्यांकन"] E --> E4["ब्रैकेट संतुलन"]

महत्वपूर्ण आरेख (SVG)

आरेख 1: स्टैक में Push और Pop क्रिया

Push क्रिया C (शीर्ष) B A Top append(element) Pop क्रिया C (निकाला जा रहा) B (नया शीर्ष) A Top स्वर्ण नियम: स्टैक में प्रवेश और निष्कासन शीर्ष से ही होता है

आरेख 2: पोस्टफिक्स मूल्यांकन का प्रवाह

पोस्टफिक्स: 2 3 + 5 * बाएँ से दाएँ प्रत्येक चिह्न पढ़ें ऑपरेंड? पुश करें ऑपरेटर? दो Pop गणना कर परिणाम पुश करें अंत में शेष तत्व = उत्तर (25) स्वर्ण नियम: ऑपरेटर पर दूसरा Pop पहला ऑपरेंड होता है

सामान्य गलतियाँ

  1. Pop का क्रम गलत करना: मूल्यांकन में जब स्टैक से दो ऑपरेंड निकालते हैं तो पहला Pop निकला b होता है और दूसरा a, अतः a - b (घटाव) में क्रम महत्वपूर्ण है। गलत क्रम से उत्तर ऋणात्मक हो सकता है।
  2. Underflow की जाँच न करना: खाली स्टैक से pop करने पर त्रुटि आती है। हर pop से पहले स्टैक खाली होने की जाँच करनी चाहिए।
  3. append के स्थान पर insert का उपयोग: स्टैक में तत्व सूची के अंत में जुड़ता है (append), शुरुआत में नहीं (insert(0,...)), अन्यथा LIFO का क्रम टूट जाता है।
  4. Peek में तत्व निकालना: Peek का उद्देश्य केवल शीर्ष देखना है; उसमें pop न करें।
  5. रेखीय संरचना को त्रि-आयामी समझना: स्टैक सामान्य सूची नहीं है; मध्य में से तत्व निकालना (index से pop) स्टैक की शुद्धता को भंग करता है।
  6. ब्रैकेट संतुलन में मिलान वाले ब्रैकेट की जाँच न करना: केवल संख्या गिनने से गलत परिणाम मिलता है; प्रकार का मिलान आवश्यक है।

परीक्षा युक्तियाँ

  1. Push और Pop के चरण-दर-चरण परिणाम लिखने वाले प्रश्नों का अभ्यास करें, क्योंकि ये अक्सर पूछे जाते हैं।
  2. stack.append(x) push के लिए और stack.pop() pop के लिए है - इस जोड़े को कभी न भूलें।
  3. पोस्टफिक्स/इनफिक्स रूपांतरण और मूल्यांकन के 5-6 उदाहरण स्वयं हल करें।
  4. स्टैक में शीर्ष की स्थिति का हिसाब रखें; उत्तर लिखते समय प्रत्येक चरण में स्टैक की स्थिति दिखाएँ।
  5. LIFO की परिभाषा और एक व्यावहारिक उदाहरण (जैसे प्लेटों का ढेर) याद रखें।
  6. रिकर्शन और स्टैक के संबंध को समझें, क्योंकि यह अंतर्विषयक प्रश्नों में आता है।

निष्कर्ष

स्टैक डेटा संरचनाओं की नींव में से एक है, जो LIFO सिद्धांत पर कार्य करती है। इसका शीर्ष-केंद्रित प्रवेश-निष्कासन इसे रिकर्शन, अभिव्यक्ति मूल्यांकन, ब्रैकेट संतुलन और undo/redo जैसे अनुप्रयोगों में अत्यंत उपयोगी बनाता है। पाइथन में सूची की append() और pop() विधियों से स्टैक को सरलता से कार्यान्वित किया जा सकता है। परीक्षा में अच्छे अंक लाने के लिए push/pop के चरणबद्ध निष्पादन, पोस्टफिक्स मूल्यांकन और underflow/overflow स्थितियों का अभ्यास आवश्यक है। स्टैक की अवधारणाओं की गहरी समझ आगे की पढ़ाई में क्यू और ट्री जैसी संरचनाओं के लिए भी आधार तैयार करती है।