📘 CodingMarble Learn

पायथन में स्टैक: जो आख़िर में आया, वह पहले निकला

स्टैक ऐसी डेटा संरचना है जिसमें आइटम केवल एक सिरे से जोड़े और हटाए जाते हैं, जिसे टॉप (शीर्ष) कहते हैं। यह LIFO नियम मानता है: Last In, First Out। जोड़ना push, हटाना pop, और बिना हटाए टॉप देखना peek है। ख़ाली स्टैक से pop करना अंडरफ़्लो है; भरे हुए तय आकार के स्टैक में push करना ओवरफ़्लो है। पायथन में लिस्ट स्टैक का काम करती है: append() अंत (टॉप) पर push करता है और pop() अंत से हटाता है।

🎬 कदम-दर-कदम कहानी

  1. स्टैक थालियों के ढेर जैसा है। आप थाली केवल ऊपर रख या ऊपर से उठा सकते हैं।
  2. push नया आइटम ऊपर रखता है। push(10), push(20), push(30): अब 30 सबसे ऊपर।
  3. pop ऊपर वाला आइटम हटाकर देता है। जो आख़िर में रखा, वह पहले निकलता है: LIFO।
  4. peek ऊपर वाला बिना हटाए देखता है। ख़ाली स्टैक से pop करना गलती है: अंडरफ़्लो।
  5. पायथन में लिस्ट ही स्टैक है। लिस्ट का अंत टॉप है: append() = push, pop() = pop, L[-1] = peek।
  6. आपकी बारी: push और pop कीजिए। pop दबाने से पहले अनुमान लगाइए क्या निकलेगा।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

स्टैक के बीच से आइटम क्यों नहीं ले सकते?

स्टैक के नियम में केवल टॉप खुला है। यही उसे स्टैक बनाता है।

लिस्ट का कौन-सा सिरा टॉप है?

अंत (आख़िरी इंडेक्स)। append वहीं जोड़ता है और pop वहीं से हटाता है।

क्या pop और peek एक ही हैं?

नहीं। pop टॉप हटाकर लौटाता है। peek केवल दिखाता है।

पायथन ने 'pop from empty list' क्यों कहा?

कुछ बचा ही नहीं था और आपने pop किया: अंडरफ़्लो। पहले ख़ाली है या नहीं जाँचें।

पहले push हुआ आइटम आख़िर में क्यों निकलता है?

बाद वाले हर push उसके ऊपर बैठते हैं, इसलिए वह सबसे नीचे रहता है जब तक बाकी सब pop न हो जाएँ।

स्टैक क्या है?

डेटा संरचना डेटा को सहेजने और व्यवस्थित करने का तरीका है ताकि उसका अच्छा उपयोग हो सके। स्टैक एक रेखीय डेटा संरचना है जिसमें जोड़ना और हटाना दोनों केवल एक सिरे पर होते हैं, जिसे टॉप कहते हैं।

इसलिए आख़िर में जुड़ा आइटम सबसे पहले हटता है। इस नियम को LIFO (Last In, First Out) कहते हैं।

रोज़ के स्टैक: थालियों का ढेर, कलाई पर चूड़ियाँ, एक के ऊपर एक रखी किताबें।

स्टैक पर काम: push, pop, peek, isEmpty

ओवरफ़्लो और अंडरफ़्लो

अंडरफ़्लो: ख़ाली स्टैक से pop (या peek) करना। ओवरफ़्लो: भरे हुए स्टैक में push करना (केवल तय आकार वाले स्टैक में)। पायथन लिस्ट अपने-आप बढ़ती है, इसलिए हम मुख्यतः अंडरफ़्लो जाँचते हैं।

पायथन लिस्ट से स्टैक बनाना

लिस्ट के अंत को टॉप मानें। तब दोनों काम तेज़ होते हैं।

def isEmpty(stk):
    return len(stk) == 0

def push(stk, item):
    stk.append(item)

def pop(stk):
    if isEmpty(stk):
        return 'Underflow'
    return stk.pop()

def peek(stk):
    if isEmpty(stk):
        return 'Underflow'
    return stk[-1]

def display(stk):
    for i in range(len(stk) - 1, -1, -1):
        print(stk[i])   # पहले टॉप

s = []
push(s, 10); push(s, 20); push(s, 30)
print(pop(s))    # 30
print(peek(s))   # 20

display ऊपर से नीचे छापता है, इसलिए लूप आख़िरी इंडेक्स से 0 तक उल्टा चलता है।

बोर्ड जैसा प्रश्न: शर्त वाले रिकॉर्ड push करना

कई प्रश्नों में कुछ ही आइटम push करके फिर सब pop करने होते हैं।

# 75 से ज़्यादा अंक वाले छात्रों के नाम push करो, फिर सब pop
D = {'Asha': 92, 'Ravi': 70, 'Zoya': 81, 'Om': 64}
st = []
def push_top(D):
    for name in D:
        if D[name] > 75:
            st.append(name)
def pop_all():
    while st:
        print(st.pop(), end=' ')
    print('\nStack empty')
push_top(D); pop_all()     # Zoya Asha

ध्यान दें: Asha पहले push हुई, इसलिए आख़िर में निकली।

स्टैक कहाँ काम आता है?

करके देखें: स्टैक से अपना नाम उल्टा कीजिए

5 पर्चियाँ लीजिए। हर पर्ची पर अपने नाम का एक अक्षर लिखकर एक-एक करके ढेर बनाइए। अब ऊपर से एक-एक उठाकर अक्षर पढ़िए। नाम उल्टा निकलेगा! फिर यही पायथन में लिखिए: हर अक्षर append से push, और लिस्ट ख़ाली होने तक pop। 3D के आख़िरी कदम में हर pop से पहले अनुमान जाँचिए।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. ख़ाली स्टैक से शुरू: push(5), push(8), pop(), push(3), push(9), pop(), pop()। क्या बचा और क्या निकला?

[5] → [5,8] → 8 निकला → [5] → [5,3] → [5,3,9] → 9 निकला → 3 निकला → [5]। निकलने का क्रम: 8, 9, 3। बचा: [5]।

2. स्टैक से स्ट्रिंग उल्टी करने वाला फ़ंक्शन लिखिए।

def rev(s): st = [] for ch in s: st.append(ch) out = '' while st: out += st.pop() return out print(rev('CODE')) # EDOC

3. क्या छपेगा? st = [1, 2, 3]; st.append(4); st.pop(); print(st[-1], len(st))

append के बाद [1,2,3,4]। pop ने 4 हटाया → [1,2,3]। st[-1] = 3, len = 3। आउटपुट: 3 3।

4. लिस्ट NUM की सम संख्याएँ स्टैक EVEN में push करके फिर सब pop करके छापिए।

NUM = [12, 7, 4, 9, 20] EVEN = [] for n in NUM: if n % 2 == 0: EVEN.append(n) while EVEN: print(EVEN.pop(), end=' ') # 20 4 12 print('Stack Empty')

5. हम अंत पर append()/pop() क्यों करते हैं, आगे insert(0, x)/pop(0) क्यों नहीं?

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

6. '(a+b)*(c-d))' में कोष्ठक संतुलित हैं या नहीं, जाँचने का फ़ंक्शन लिखिए।

def balanced(e): st = [] for ch in e: if ch == '(': st.append(ch) elif ch == ')': if not st: return False # अंडरफ़्लो: फ़ालतू ')' st.pop() return len(st) == 0 print(balanced('(a+b)*(c-d))')) # False

आम गलतियाँ

अभ्यास क्विज़

1. स्टैक कौन-सा नियम मानता है?
2. कौन-सा लिस्ट मेथड स्टैक में push करता है?
3. ख़ाली स्टैक से pop करना कहलाता है:
4. push(1), push(2), push(3), pop() के बाद टॉप पर क्या है?
5. बिना हटाए टॉप आइटम कौन देता है?

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

कक्षा 12 पायथन में स्टैक क्या है?

एक रेखीय डेटा संरचना जिसमें आइटम एक सिरे (टॉप) पर push और pop होते हैं, LIFO नियम से। इसे लिस्ट के append() और pop() से बनाते हैं।

ओवरफ़्लो और अंडरफ़्लो में क्या अंतर है?

ओवरफ़्लो भरे तय आकार के स्टैक में push करना है। अंडरफ़्लो ख़ाली स्टैक से pop करना है।

स्टैक को LIFO क्यों कहते हैं?

क्योंकि आख़िर में push हुआ आइटम सबसे पहले pop होता है।

यह कहाँ पढ़ाया जाता है

सीबीएसई (भारत)कक्षा 12संगणनात्मक चिंतन और प्रोग्रामिंग - 2
रूस11 классAlgorithms and programming

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ