Follow Us
माध्यम चुनें / Select Medium:
Eng (English) Beng (বাংলা) Hindi (हिन्दी)
WBB • कक्षा XII • Computer Science • अध्याय 2
अनुमानित समय: 120 Mins
प्रगति: अध्ययनरत

Data Structures (डेटा संरचनाएं)

कंप्यूटर विज्ञान में डेटा संरचनाएं (Data Structures) मेमोरी में डेटा को सुव्यवस्थित, संरक्षित एवं प्रबंधित करने की मूलभूत वास्तुकला हैं ताकि विभिन्न कम्प्यूटेशनल संक्रियाएं न्यूनतम समय और संसाधनों में निष्पादित की जा सकें। पश्चिम बंगाल उच्चतर माध्यमिक शिक्षा परिषद (WBCHSE) कक्षा 12 कंप्यूटर साइंस के इस द्वितीय अध्याय में रैखिक डेटा संरचनाओं (क्रमागत ऐरे, LIFO आधारित स्टैक, FIFO आधारित क्यू तथा गतिशील लिंक्ड लिस्ट) एवं गैर-रैखिक पदानुक्रमित संरचनाओं (बाइनरी ट्री एवं बाइनरी सर्च ट्री) का समग्र अध्ययन किया गया है। विद्यार्थी एल्गोरिदम की समय व स्थान जटिलता, ऐरे मेमोरी पता संगणना, व्यंजक रूपांतरण एवं ट्री ट्रैवर्सल तकनीकों में पूर्ण निपुणता प्राप्त करते हैं।

यह अध्याय क्यों महत्वपूर्ण है

सॉफ्टवेयर विकास और प्रणाली डिजाइन में सही डेटा संरचना का चयन ही किसी प्रोग्राम की दक्षता और निष्पादन गति निर्धारित करता है। ऑपरेटिंग सिस्टम प्रोसेस शेड्यूलिंग में क्यू और प्राथमिकता क्यू, कंपाइलर गणितीय व्यंजकों के सिंटैक्स पार्सिंग एवं रिकर्सन कॉल में स्टैक, डायनामिक मेमोरी आवंटन में लिंक्ड लिस्ट तथा डेटाबेस इंडेक्सिंग व तीव्र खोज में बाइनरी सर्च ट्री का उपयोग करते हैं। बोर्ड परीक्षा में उत्कृष्ट अंक प्राप्त करने तथा उच्च तकनीकी शिक्षा (बीटेक/बीसीए) की सुदृढ़ नींव रखने हेतु डेटा संरचनाओं की सैद्धांतिक एवं व्यावहारिक समझ अनिवार्य है।

अध्याय रूपरेखा एवं प्रगति

1 मॉड्यूल 1: डेटा संरचनाओं की नींव एव...
2 मॉड्यूल 2: रैखिक ऐरे एवं खोज एल्गोर...
3 मॉड्यूल 3: स्टैक (LIFO): संरचना एवं...
4 मॉड्यूल 4: क्यू (FIFO): रैखिक, वृत्...
5 मॉड्यूल 5: लिंक्ड लिस्ट: डायनामिक म...
6 मॉड्यूल 6: पदानुक्रमित ट्री एवं बाइ...

सम्पूर्ण सैद्धांतिक एवं वैचारिक अध्ययन

मॉड्यूल 1: डेटा संरचनाओं की नींव एवं जटिलता विश्लेषण

1.1 डेटा संरचनाओं की मूलभूत संकल्पना एवं अमूर्त डेटा प्रकार (ADT)

डेटा संरचना (Data Structure): कंप्यूटर मेमोरी में डेटा तत्वों का एक विशेष तार्किक या गणितीय संगठन है जो डेटा पर विभिन्न संक्रियाओं (जैसे खोज, प्रविष्टि, विलोपन) को अत्यंत दक्ष बनाता है। Abstract Data Type (ADT) वह गणितीय मॉडल है जो यह परिभाषित करता है कि डेटा पर कौन से कार्य किए जा सकते हैं, बिना यह बताए कि मेमोरी में उनका कार्यान्वयन कैसे होगा।

डेटा संरचनाओं का वर्गीकरण निम्नलिखित आधारों पर किया जाता है:

  • आदिम (Primitive) बनाम गैर-आदिम (Non-Primitive): प्रिमिटिव प्रकार (जैसे int, float, char) सीधे प्रोसेसर निर्देशों द्वारा संचालित होते हैं। गैर-प्रिमिटिव डेटा संरचनाएं प्रिमिटिव प्रकारों के संयोजन से निर्मित मिश्रित संरचनाएं हैं (जैसे ऐरे, स्टैक, क्यू, लिंक्ड लिस्ट)।
  • रैखिक (Linear) बनाम गैर-रैखिक (Non-Linear): रैखिक संरचनाओं में तत्व एक क्रमिक अनुक्रम में व्यवस्थित होते हैं जहाँ प्रत्येक तत्व का एक निश्चित पूर्ववर्ती (predecessor) और उत्तरवर्ती (successor) होता है। गैर-रैखिक संरचनाओं में तत्व बहु-स्तरीय पदानुक्रम या नेटवर्क में जुड़े होते हैं (जैसे ट्री एवं ग्राफ)।
  • स्थैतिक (Static) बनाम गतिशील (Dynamic): स्थैतिक संरचना में कंपाइल समय पर निश्चित आकार की मेमोरी आवंटित होती है (जैसे फिक्स्ड ऐरे); गतिशील संरचना में रन-टाइम के दौरान आवश्यकतानुसार हीप मेमोरी आवंटित व मुक्त की जाती है (जैसे लिंक्ड लिस्ट)।
1.2 प्राथमिक संक्रियाएं एवं स्पर्शोन्मुख जटिलता विश्लेषण

किसी भी डेटा संरचना पर छह मूलभूत संक्रियाएं निष्पादित की जा सकती हैं:

  • ट्रैवर्सल (Traversal): संरचना के प्रत्येक तत्व को क्रमबद्ध रूप से ठीक एक बार देखना और संसाधित करना।
  • प्रविष्टि (Insertion): संरचना में एक नए डेटा तत्व को निर्दिष्ट स्थान पर जोड़ना।
  • विलोपन (Deletion): संरचना से किसी अवांछित तत्व को हटाना तथा मेमोरी को मुक्त करना।
  • खोज (Searching): किसी दी गई 'की' (Key) का स्थान या मेमोरी पता ज्ञात करना।
  • सॉर्टिंग (Sorting): तत्वों को आरोही (Ascending) अथवा अवरोही (Descending) क्रम में व्यवस्थित करना।
  • मर्जिंग (Merging): दो पृथक व्यवस्थित संरचनाओं के तत्वों को एक संयुक्त व्यवस्थित संरचना में मिलाना।
संरचना का प्रकार तत्वों का संगठन मेमोरी आवंटन ट्रैवर्सल जटिलता प्रमुख उदाहरण
रैखिक संरचनाएं एकल-स्तरीय क्रमिक संबंध (पूर्ववर्ती एवं उत्तरवर्ती) क्रमागत (ऐरे) अथवा पॉइंटर्स द्वारा जुड़ी मेमोरी $O(n)$ एकल-पास पुनरावृत्ति 1D/2D ऐरे, स्टैक, क्यू, लिंक्ड लिस्ट
गैर-रैखिक संरचनाएं पदानुक्रमित बहु-स्तरीय या जालिका संबंध हीप मेमोरी में पॉइंटर-आधारित संबंध रिकर्सिव ट्रैवर्सल (Pre/In/Post-order) बाइनरी ट्री, बाइनरी सर्च ट्री (BST), ग्राफ

मॉड्यूल 2: रैखिक ऐरे एवं खोज एल्गोरिदम

2.1 रैखिक ऐरे एवं मेमोरी एड्रेस गणना के गणितीय सूत्र

ऐरे (Array): सजातीय (समान प्रकार के) तत्वों का एक समूह जो मेमोरी में परस्पर क्रमागत स्थानों पर संग्रहीत होता है। आधार पते (Base Address) और तत्व के आकार की सहायता से किसी भी तत्व का भौतिक पता $O(1)$ समय में सीधे प्राप्त किया जा सकता है:

  • 1D ऐरे पता सूत्र: बेस एड्रेस $B$, तत्व का बाइट आकार $W$ तथा निचली सीमा $LB$ होने पर: $$\text{Address}(A[k]) = B + W \times (k - LB)$$
  • 2D ऐरे रो-मेजर ऑर्डर (RMO): तत्वों का भंडारण पंक्ति-दर-पंक्ति क्रमिक रूप से होता है। $R \times C$ आकार के आव्यूह में: $$\text{Address}(A[i][j]) = B + W \times [C \times (i - LBR) + (j - LBC)]$$
  • 2D ऐरे कॉलम-मेजर ऑर्डर (CMO): तत्वों का भंडारण स्तंभ-दर-स्तंभ क्रमिक रूप से होता है: $$\text{Address}(A[i][j]) = B + W \times [(i - LBR) + R \times (j - LBC)]$$
2.2 खोज एल्गोरिदम: रैखिक खोज बनाम बाइनरी खोज

सूची में किसी तत्व का स्थान निर्धारित करने के दो प्रमुख एल्गोरिदम नीचे दिए गए हैं:

# पायथन में बाइनरी सर्च का सटीक कार्यान्वयन
def binary_search(arr, target):
    low = 0
    high = len(arr) - 1
    
    while low <= high:
        # ओवरफ्लो सुरक्षित मध्य बिंदु गणना:
        mid = low + (high - low) // 2
        
        if arr[mid] == target:
            return mid  # तत्व mid इंडेक्स पर मिल गया
        elif arr[mid] < target:
            low = mid + 1  # दाएँ आधे भाग में खोजें
        else:
            high = mid - 1  # बाएँ आधे भाग में खोजें
            
    return -1  # तत्व ऐरे में उपस्थित नहीं है
तुलनात्मक पैरामीटर रैखिक (Linear / Sequential) खोज बाइनरी (Binary / Divide & Conquer) खोज
पूर्वशर्त कोई पूर्वशर्त नहीं। अव्यवस्थित (unsorted) सूची पर भी कार्य करता है। अनिवार्य रूप से व्यवस्थित (Sorted): सूची आरोही या अवरोही क्रम में होनी चाहिए।
अधिकतम समय जटिलता $O(n)$ — पूरे ऐरे को अंत तक खंगालना पड़ता है। $O(\log_2 n)$ — प्रत्येक चरण में खोज क्षेत्र आधा घट जाता है।
न्यूनतम समय जटिलता $O(1)$ — जब तत्व पहले ही इंडेक्स $0$ पर मिल जाए। $O(1)$ — जब तत्व ठीक मध्य बिंदु (mid) पर मिल जाए।
पहुँच प्रणाली क्रमिक पहुँच। ऐरे एवं लिंक्ड लिस्ट दोनों के अनुकूल। यादृच्छिक (Random) प्रत्यक्ष पहुँच आवश्यक। लिंक्ड लिस्ट पर अनुपयुक्त।

मॉड्यूल 3: स्टैक (LIFO): संरचना एवं व्यंजक मूल्यांकन

3.1 स्टैक वास्तुकला: LIFO सिद्धांत एवं सीमा स्थितियां

स्टैक (Stack): एक प्रतिबंधित रैखिक डेटा संरचना जो कठोरता से Last-In, First-Out (LIFO) सिद्धांत का पालन करती है। इसमें तत्व प्रविष्ट करना (Push) एवं तत्व निकालना (Pop) केवल एक ही छोर से संभव है जिसे Top of Stack (TOS) कहा जाता है।

  • शीर्ष सूचक (top): स्टैक के सबसे ऊपरी तत्व का इंडेक्स दर्शाता है। रिक्त स्टैक में top = -1।
  • स्टैक ओवरफ्लो (Stack Overflow): जब स्टैक अपनी पूर्ण क्षमता पर हो (top == MAX - 1) और उसमें पुनः push करने का प्रयास किया जाए।
  • स्टैक अंडरफ्लो (Stack Underflow): जब स्टैक पूर्णतः रिक्त हो (top == -1) और उसमें से pop अथवा peek करने का प्रयास किया जाए।
# पायथन में क्लास आधारित स्टैक संरचना
class Stack:
    def init(self, capacity=10):
        self.items = []
        self.capacity = capacity
        
    def is_empty(self):
        return len(self.items) == 0
        
    def is_full(self):
        return len(self.items) >= self.capacity
        
    def push(self, val):
        if self.is_full():
            raise OverflowError("Stack Overflow: स्टैक पूर्णतः भरा है!")
        self.items.append(val)
        
    def pop(self):
        if self.is_empty():
            raise IndexError("Stack Underflow: स्टैक पूर्णतः रिक्त है!")
        return self.items.pop()
        
    def peek(self):
        if self.is_empty():
            return None
        return self.items[-1]
3.2 पॉलिश संकेतन एवं व्यंजक मूल्यांकन

अंकगणितीय व्यंजकों को तीन मानक रूपों में लिखा जा सकता है:

  • इनफिक्स संकेतन: ऑपरेटर दो ऑपरेंड्स के मध्य में स्थित होता है (जैसे A + B * C)। मानव पठन हेतु सरल किंतु कंप्यूटर में कोष्ठक और प्राथमिकता नियमों की आवश्यकता होती है।
  • प्रिफिक्स संकेतन (पॉलिश): ऑपरेटर ऑपरेंड्स से पहले आता है (जैसे + A * B C)। यह कोष्ठक-मुक्त संकेतन है।
  • पोस्टफिक्स संकेतन (रिवर्स पॉलिश - RPN): ऑपरेटर ऑपरेंड्स के ठीक बाद आता है (जैसे A B C * +)। स्टैक-आधारित मशीनों व कंपाइलरों द्वारा इसका मूल्यांकन अत्यंत तीव्र गति से होता है।
संकेतन का प्रकार ऑपरेटर की स्थिति कोष्ठकों की अनिवार्यता मूल्यांकन प्रविधि मानक उदाहरण
इनफिक्स (Infix) ऑपरेंड 1 <ऑपरेटर> ऑपरेंड 2 प्राथमिकता बदलने हेतु अनिवार्य ऑपरेटर एवं ऑपरेंड के दो पृथक स्टैक (A + B) * (C - D)
प्रिफिक्स (Prefix) <ऑपरेटर> ऑपरेंड 1 ऑपरेंड 2 पूर्णतः अनावश्यक दाएँ से बाएँ ऑपरेंड स्टैक स्कैन * + A B - C D
पोस्टफिक्स (Postfix) ऑपरेंड 1 ऑपरेंड 2 <ऑपरेटर> पूर्णतः अनावश्यक बाएँ से दाएँ ऑपरेंड स्टैक स्कैन A B + C D - *

मॉड्यूल 4: क्यू (FIFO): रैखिक, वृत्ताकार एवं डेक संरचना

4.1 क्यू वास्तुकला: FIFO सिद्धांत एवं फॉल्स ओवरफ्लो दोष

क्यू (Queue): एक रैखिक डेटा संरचना जो First-In, First-Out (FIFO) सिद्धांत पर कार्य करती है। इसमें दो स्वतंत्र छोर सूचक होते हैं:

  • फ्रंट पॉइंटर (front): वह छोर जहाँ से तत्वों को हटाया (dequeue) जाता है।
  • रियर पॉइंटर (rear): वह छोर जहाँ नए तत्वों को जोड़ा (enqueue) जाता है।
  • रैखिक क्यू का फॉल्स ओवरफ्लो (False Overflow): क्रमिक विलोपन के कारण front आगे बढ़ता है और rear अंतिम सिरे (rear == MAX - 1) पर पहुँच जाता है। आगे खाली स्थान होने के बावजूद नया तत्व नहीं जोड़ा जा सकता और क्यू त्रुटिवश ओवरफ्लो दर्शाती है।
4.2 वृत्ताकार क्यू एवं क्यू के प्रकार

वृत्ताकार क्यू (Circular Queue): फॉल्स ओवरफ्लो को समाप्त करने हेतु यह अंतिम इंडेक्स को मॉड्यूलस अंकगणित द्वारा पुनः प्रारंभिक इंडेक्स से जोड़ती है:

  • चक्रीय वृद्धि: rear = (rear + 1) % MAX एवं front = (front + 1) % MAX।
  • पूर्णता की शर्त: (rear + 1) % MAX == front।
  • रिक्तता की शर्त: front == -1।
क्यू का प्रकार पॉइंटर संचालन प्रविष्टि एवं विलोपन छोर मेमोरी उपयोग दक्षता इंजीनियरिंग अनुप्रयोग
रैखिक क्यू सरल वृद्धि (front++, rear++) Rear पर प्रविष्टि, Front पर विलोपन कमजोर (फॉल्स ओवरफ्लो दोष) प्रिंट स्पूलर, बैच प्रोसेसिंग
वृत्ताकार क्यू मॉड्यूलस चक्र: (ptr + 1) % MAX Rear पर प्रविष्टि, Front पर विलोपन सर्वोत्तम (रिक्त स्थान का पुनरुद्भव) OS राउंड-रॉबिन, ऑडियो स्ट्रीमिंग
डेक (Deque) दोनों छोरों पर द्विदिश सूचक दोनों छोरों पर प्रविष्टि एवं विलोपन मान्य अत्यधिक लचीला (स्टैक या क्यू दोनों संभव) ब्राउज़र हिस्ट्री, अनडू-रीडू बफ़र
प्राथमिकता क्यू आगमन क्रम के स्थान पर प्राथमिकता का मान उच्चतम प्राथमिकता तत्व पहले निष्कासित हीप (Heap) ट्री द्वारा $O(\log n)$ गति CPU शेड्यूलिंग, डिकस्ट्रा एल्गोरिदम

मॉड्यूल 5: लिंक्ड लिस्ट: डायनामिक मेमोरी एवं पॉइंटर संचालन

5.1 गतिशील मेमोरी एवं लिंक्ड लिस्ट का नोड मॉडल

ऐरे की निश्चित आकार सीमा और तत्वों के विस्थापन ($O(n)$ shifting) से बचने के लिए लिंक्ड लिस्ट (Linked List) का उपयोग होता है। इसमें हीप मेमोरी में स्वतंत्र नोड्स (Nodes) निर्मित होते हैं जिन्हें पॉइंटर्स द्वारा जोड़ा जाता है। प्रत्येक नोड में दो मुख्य भाग होते हैं:

  • डेटा फील्ड (Data): वास्तविक मान या पेलोड संग्रहीत करता है।
  • नेक्स्ट फील्ड (Next): अगले नोड का मेमोरी पता संग्रहीत करता है। अंतिम नोड का नेक्स्ट मान None (अथवा NULL) होता है।
  • हेड पॉइंटर (Head): पहले नोड का संदर्भ रखता है। सूची रिक्त होने पर head is None होता है।
5.2 एकल, द्वैत एवं वृत्ताकार लिंक्ड लिस्ट का तुलनात्मक अध्ययन

लिंक्ड लिस्ट के तीन प्रमुख रूप प्रचलित हैं:

  • एकल लिंक्ড लिस्ट (SLL): एकदिशीय अग्रगामी नेविगेशन। शीर्ष पर प्रविष्टि मात्र पॉइंटर बदलकर $O(1)$ समय में हो जाती है।
  • द्वैत लिंक्ड लिस्ट (DLL): प्रत्येक नोड में दो पॉइंटर्स (prev एवं next) होते हैं। यह द्विदिशीय नेविगेशन प्रदान करता है।
  • वृत्ताकार लिंक्ड लिस्ट (CLL): अंतिम नोड None के स्थान पर पुनः head नोड को इंगित करता है।
तुलनात्मक मानक क्रमागत ऐरे (Array) एकल लिंक्ड लिस्ट (SLL)
मेमोरी संगठन कठोरता से क्रमागत एवं सन्निहित मेमोरी ब्लॉक हीप मेमोरी में अलग-अलग नोड्स, पॉइंटर्स से जुड़े
इंडेक्स द्वारा सीधा पहुँचना $O(1)$ त्वरित प्रत्यक्ष पहुँच संभव $O(n)$ हेड से क्रमिक रूप से आगे बढ़ना पड़ता है
प्रारंभ में प्रविष्टि या विलोपन $O(n)$ — शेष सभी तत्वों को खिसकाना पड़ता है $O(1)$ — बिना किसी विस्थापन के सिर्फ पॉइंटर बदलना
मेमोरी ओवरहेड शून्य पॉइंटर ओवरहेड; केवल डेटा मान संग्रहित प्रत्येक नोड में 4 या 8 बाइट का अतिरिक्त पॉइंटर भार
आकार परिवर्तनशीलता स्थिर या जटिल री-एलोकेशन की आवश्यकता पूर्णतः गतिशील; निर्बाध रूप से घटता-बढ़ता है

मॉड्यूल 6: पदानुक्रमित ट्री एवं बाइनरी सर्च ट्री (BST)

6.1 ट्री डेटा संरचना की शब्दावली एवं बाइनरी ट्री

ट्री (Tree): एक गैर-रैखिक पदानुक्रमित संरचना है जिसमें नोड्स और उन्हें जोड़ने वाले एज (Edges) होते हैं। इसमें केवल एक मुख्य रूट नोड (Root Node) होता है तथा शेष नोड्स उप-वृक्षों (Subtrees) में विभाजित होते हैं।

  • डिग्री (Degree): किसी नोड के प्रत्यक्ष संतति (children) नोड्स की कुल संख्या।
  • पर्ण नोड (Leaf Node): वह नोड जिसकी डिग्री शून्य हो (कोई संतान नहीं)।
  • ऊंचाई (Height): रूट से सबसे दूर स्थित पर्ण नोड तक के सबसे लंबे पथ की लंबाई। $h$ ऊंचाई के बाइनरी ट्री में अधिकतम नोड संख्या $N_{\max} = 2^{h+1} - 1$ होती है।
  • बाइनरी ट्री: ऐसा ट्री जिसमें प्रत्येक नोड के अधिकतम दो बच्चे हो सकते हैं (बायाँ बच्चा एवं दायाँ बच्चा)।
6.2 बाइनरी सर्च ट्री (BST) एवं रिकर्सिव ट्रैवर्सल विधियां

बाइनरी सर्च ट्री (BST): एक विशेष बाइनरी ट्री है जो निम्नलिखित नियम का कड़ाई से पालन करता है:

BST का मूल सिद्धांत: किसी भी नोड $N$ के लिए:
• $N$ के बाएँ सब-ट्री के सभी मान $N$ के मान से कड़ाई से छोटे होते हैं।
• $N$ के दाएँ सब-ट्री के सभी मान $N$ के मान से कड़ाई से बड़े होते हैं।
• बायाँ एवं दायाँ दोनों सब-ट्री स्वयं भी वैध बाइनरी सर्च ट्री होने चाहिए।
ट्रैवर्सल विधि नोड अवलोकन का क्रम विशेष लक्षण प्रमुख अनुप्रयोग
प्री-ऑर्डर (Pre-order) रूट $\to$ बायाँ $\to$ दायाँ (DLR) रूट नोड हमेशा सबसे पहले संसाधित होता है। ट्री की प्रतिलिपि बनाना, प्रिफिक्स व्यंजक
इन-ऑर्डर (In-order) बायाँ $\to$ रूट $\to$ दायाँ (LDR) किसी भी BST का इन-ऑर्डर सदैव सॉर्टेड आरोही क्रम देता है! ट्री सॉर्टिंग, BST की वैधता की जाँच
पोस्ट-ऑर्डर (Post-order) बायाँ $\to$ दायाँ $\to$ रूट (LRD) रूट नोड हमेशा सबसे अंत में संसाधित होता है। ट्री को नष्ट करना, पोस्टफिक्स व्यंजक

प्रोग्रामिंग सिंटेक्स, स्टेटमेंट्स एवं भाषा अनुवादक नियम

1D ऐरे मेमोरी पता निर्धारण सूत्र
Address(A[k]) = B + W * (k - LB)
2D ऐरे रो-मेजर ऑर्डर (RMO) पता सूत्र
Address(A[i][j]) = B + W * [C * (i - LBR) + (j - LBC)]
2D ऐरे कॉलम-मेजर ऑर्डर (CMO) पता सूत्र
Address(A[i][j]) = B + W * [(i - LBR) + R * (j - LBC)]
बाइनरी खोज की पुनरावृत्ति एवं जटिलता
T(n) = T(n / 2) + O(1) ==> T(n) = O(log2 n)
वृत्ताकार क्यू पॉइंटर चक्रीयता एवं पूर्णता शर्त
rear = (rear + 1) % MAX | Full: (rear + 1) % MAX == front
h ऊंचाई के बाइनरी ट्री में अधिकतम नोड संख्या
$$N_max = 2^(h + 1) - 1$$

अवधारणात्मक हल उदाहरण एवं अनुप्रयोग (Solved Examples)

उदाहरण 1
एक पूर्णांक ऐरे A[10..50] मेमोरी में 3000 बेस एड्रेस पर स्थित है। यदि प्रत्येक तत्व 4 बाइट मेमोरी लेता है, तो A[32] का सटीक मेमोरी पता ज्ञात कीजिए।
विस्तृत समाधान / उत्तर:
चरण 1: दिए गए मानों की पहचान:
  • बेस एड्रेस ($B$) = 3000
  • तत्व का बाइट आकार ($W$) = 4
  • निचली सीमा ($LB$) = 10
  • अभीष्ट इंडेक्स ($k$) = 32
चरण 2: 1D ऐरे पता सूत्र लागू करें: $$\text{Address}(A[k]) = B + W \times (k - LB)$$ चरण 3: सूत्र में मान प्रतिस्थापित कर हल करें: $$\text{Address}(A[32]) = 3000 + 4 \times (32 - 10)$$ $$\text{Address}(A[32]) = 3000 + 4 \times 22$$ $$\text{Address}(A[32]) = 3000 + 88 = 3088$$ उत्तर: तत्व $A[32]$ का मेमोरी पता 3088 है।
उदाहरण 2
स्टैक एल्गोरिदम का प्रयोग करके निम्नलिखित इनफिक्स व्यंजक को पोस्टफिक्स रूप में बदलिए: (A + B) * C - D / E
विस्तृत समाधान / उत्तर:
चरण 1: बाएँ से दाएँ स्कैन करके स्टैक की स्थिति तालिका बनाएं:
स्कैन टोकन ऑपरेटर स्टैक पोस्टफिक्स आउटपुट
((—
A(A
+( +A
B( +A B
)रिक्त (+ निष्कासित)A B +
**A B +
C*A B + C
-- (* निष्कासित)A B + C *
D-A B + C * D
/- /A B + C * D
E- /A B + C * D E
Endरिक्त (/ व - निष्कासित)A B + C * D E / -
उत्तर: समतुल्य पोस्टफिक्स व्यंजक है: A B + C * D E / -
उदाहरण 3
स्टैक स्थिति दर्शाते हुए निम्नलिखित पोस्टफिक्स व्यंजक का मान ज्ञात कीजिए: 20 4 / 3 * 7 2 + -
विस्तृत समाधान / उत्तर:
चरण 1: बाएँ से दाएँ टोकन्स का मूल्यांकन करें:
  • टोकन 20: ऑपरेंड → Push 20. स्टैक: [20]
  • टोकन 4: ऑपरेंड → Push 4. स्टैक: [20, 4]
  • टोकन /: ऑपरेटर → Pop $op_2 = 4$, Pop $op_1 = 20$. गणना $20 / 4 = 5$. Push 5. स्टैक: [5]
  • टोकन 3: ऑपरेंड → Push 3. स्टैक: [5, 3]
  • टोकन *: ऑपरेटर → Pop $op_2 = 3$, Pop $op_1 = 5$. गणना $5 \times 3 = 15$. Push 15. स्टैक: [15]
  • टोकन 7: ऑपरेंड → Push 7. स्टैक: [15, 7]
  • टोकन 2: ऑपरेंड → Push 2. स्टैक: [15, 7, 2]
  • टोकन +: ऑपरेटर → Pop $op_2 = 2$, Pop $op_1 = 7$. गणना $7 + 2 = 9$. Push 9. स्टैक: [15, 9]
  • टोकन -: ऑपरेटर → Pop $op_2 = 9$, Pop $op_1 = 15$. गणना $15 - 9 = 6$. Push 6. स्टैक: [6]
चरण 2: परिणाम: व्यंजक समाप्त होने पर स्टैक में शेष अंतिम मान 6 है। उत्तर: पोस्टफिक्स व्यंजक का अंतिम मूल्यांकित मान 6 है।
उदाहरण 4
आकार 5 (इंडेक्स 0 से 4) की एक वृत्ताकार क्यू प्रारंभ में रिक्त है (front = -1, rear = -1)। निम्नलिखित संक्रियाओं के उपरांत front एवं rear के मान ज्ञात कीजिए: (a) Enqueue(10), (b) Enqueue(20), (c) Dequeue(), (d) Enqueue(30), (e) Enqueue(40), (f) Enqueue(50), (g) Enqueue(60)।
विस्तृत समाधान / उत्तर:
प्रत्येक संक्रिया के बाद सूचकों की स्थिति:
  1. प्रारंभिक स्थिति: front = -1, rear = -1 (क्यू पूर्णतः रिक्त)।
  2. (a) Enqueue(10): प्रथम तत्व। front = 0, rear = 0। ऐरे: [10, _, _, _, _]।
  3. (b) Enqueue(20): rear = (0 + 1) % 5 = 1, front = 0। ऐरे: [10, 20, _, _, _]।
  4. (c) Dequeue(): 10 बाहर हुआ। front = (0 + 1) % 5 = 1, rear = 1। ऐरे: [_, 20, _, _, _]।
  5. (d) Enqueue(30): rear = (1 + 1) % 5 = 2, front = 1। ऐरे: [_, 20, 30, _, _]।
  6. (e) Enqueue(40): rear = (2 + 1) % 5 = 3, front = 1। ऐरे: [_, 20, 30, 40, _]।
  7. (f) Enqueue(50): rear = (3 + 1) % 5 = 4, front = 1। ऐरे: [_, 20, 30, 40, 50]।
  8. (g) Enqueue(60): अगला स्थान (rear + 1) % 5 = (4 + 1) % 5 = 0। चूँकि 0 != front (1), अतः चक्र घूमकर rear = 0 पर 60 जुड़ेगा। ऐरे: [60, 20, 30, 40, 50]। अब (rear + 1) % 5 == front (1) होने से क्यू पूर्णतः भर गई है!
अंतिम स्थिति:
  • front = 1 (मान = 20)
  • rear = 0 (मान = 60)
  • कुल तत्व = 5 (पूर्ण क्षमता)।
उदाहरण 5
पायथन में एक पूर्ण Stack क्लास बनाइए जिसमें push(), pop(), peek(), isEmpty() एवं display() मेथड्स हों। उचित सीमा जाँच सुनिश्चित कीजिए।
विस्तृत समाधान / उत्तर:
पायथन प्रोग्राम कोड:
class ArrayStack:
    def init(self, max_size=5):
        self.stack = []
        self.max_size = max_size

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

    def is_full(self):
        return len(self.stack) >= self.max_size

    def push(self, element):
        # ओवरफ्लो जाँच
        if self.is_full():
            print("त्रुटि: स्टैक ओवरफ्लो! स्टैक पूर्णतः भरा है।")
            return False
        self.stack.append(element)
        print(f"{element} सफलतापूर्वक प्रविष्ट किया गया।")
        return True

    def pop(self):
        # अंडरफ्लो जाँच
        if self.is_empty():
            print("त्रुटि: स्टैक अंडरफ्लो! स्टैक पूर्णतः रिक्त है।")
            return None
        popped_item = self.stack.pop()
        print(f"{popped_item} निष्कासित किया गया।")
        return popped_item

    def peek(self):
        if self.is_empty():
            print("स्टैक रिक्त है, कोई शीर्ष तत्व नहीं।")
            return None
        return self.stack[-1]

    def display(self):
        if self.is_empty():
            print("स्टैक: [रिक्त]")
            return
        print("स्टैक तत्व (शीर्ष से नीचे):")
        for i in range(len(self.stack) - 1, -1, -1):
            print(f"| {self.stack[i]:^5} |" + (" <-- TOP" if i == len(self.stack) - 1 else ""))
        print("---------")
जटिलता विश्लेषण: सभी प्राथमिक संक्रियाएं (push, pop, peek) अचर समय $O(1)$ में निष्पादित होती हैं क्योंकि सूची के अंतिम छोर पर प्रविष्टि/विलोपन में कोई विस्थापन नहीं होता।
उदाहरण 6
दिए गए मानों को एक रिक्त बाइनरी सर्च ट्री (BST) में क्रमिक रूप से प्रविष्ट कीजिए: 45, 23, 67, 12, 34, 56, 89, 28। (a) परिणामी BST का आरेख बनाइए। (b) Pre-order, In-order एवं Post-order ट्रैवर्सल लिखिए। (c) सर्वश्रेष्ठ एवं सबसे खराब स्थिति में खोज समय जटिलता बताइए।
विस्तृत समाधान / उत्तर:
(a) चरणबद्ध BST निर्माण:
  1. 45 प्रविष्ट → रूट नोड।
  2. 23 प्रविष्ट → $23 < 45$ → 45 का बायाँ बच्चा।
  3. 67 प्रविष्ट → $67 > 45$ → 45 का दायाँ बच्चा।
  4. 12 प्रविष्ट → $12 < 45, 12 < 23$ → 23 का बायाँ बच्चा।
  5. 34 प्रविष्ट → $34 < 45, 34 > 23$ → 23 का दायाँ बच्चा।
  6. 56 प्रविष्ट → $56 > 45, 56 < 67$ → 67 का बायाँ बच्चा।
  7. 89 प्रविष्ट → $89 > 45, 89 > 67$ → 67 का दायाँ बच्चा।
  8. 28 प्रविष्ट → $28 < 45, 28 > 23, 28 < 34$ → 34 का बायाँ बच्चा।
निर्मित BST संरचना:
        45
       /  \
     23    67
    /  \   /  \
   12  34 56  89
       /
      28
(b) ट्रैवर्सल परिणाम:
  • Pre-order (रूट, बायाँ, दायाँ): 45, 23, 12, 34, 28, 67, 56, 89
  • In-order (बायाँ, रूट, दायाँ): 12, 23, 28, 34, 45, 56, 67, 89 (ध्यान दें: यह क्रम पूर्णतः सॉर्टेड आरोही क्रम है!)
  • Post-order (बायाँ, दायाँ, रूट): 12, 28, 34, 23, 56, 89, 67, 45
(c) खोज समय जटिलता:
  • सर्वश्रेष्ठ स्थिति: $O(1)$ जब अभीष्ट तत्व रूट नोड पर ही मिल जाए।
  • औसत स्थिति: $O(\log_2 n)$ जब ट्री संतुलित हो।
  • सबसे खराब स्थिति: $O(n)$ जब नोड्स पहले से सॉर्टेड क्रम में आएँ और ट्री एकदिशीय झुककर लिंक्ड लिस्ट बन जाए (Skewed Tree)।

सामान्य गलतियाँ एवं परीक्षक के जाल (Examiner Traps)

सामान्य भ्रम / गलत उत्तर

रैखिक क्यू की 'rear == MAX - 1' स्थिति को पूर्ण समझना (False Overflow)।

सही वैज्ञानिक तथ्य

वृत्ताकार क्यू (Circular Queue) का उपयोग कर '(rear + 1) % MAX' से रिक्त स्थानों का पुनरुद्भव करें।

सामान्य भ्रम / गलत उत्तर

pop() से पूर्व स्टैक की शून्यता की जाँच न करना।

सही वैज्ञानिक तथ्य

प्रत्येक pop या peek से पूर्व 'if is_empty():' सुरक्षा जाँच अवश्य लगाएँ।

सामान्य भ्रम / गलत उत्तर

पोस्टफिक्स मूल्यांकन में ऑपरेंड्स का क्रम उलट देना।

सही वैज्ञानिक तथ्य

स्पष्ट रूप से 'op2 = pop()', 'op1 = pop()' लिखकर 'op1 - op2' हल करें।

सामान्य भ्रम / गलत उत्तर

अव्यवस्थित (Unsorted) डेटा पर बाइनरी सर्च चलाना।

सही वैज्ञानिक तथ्य

बाइनरी सर्च से पूर्व डेटा का सॉर्टेड होना सुनिश्चित करें अथवा लीनियर सर्च का उपयोग करें।

सामान्य भ्रम / गलत उत्तर

बाइनरी सर्च में 'low = mid' लिखकर अनंत लूप बना देना।

सही वैज्ञानिक तथ्य

सदैव 'low = mid + 1' और 'high = mid - 1' का ही प्रयोग करें।

चित्रात्मक व्याख्या एवं मॉडल

डेटा संरचनाएं : रैखिक एवं गैर-रैखिक वास्तुकला WBCHSE कक्षा 12 कंप्यूटर साइंस (अध्याय 2) — स्टैक, क्यू, लिंक्ड लिस्ट एवं ट्री चरण 1: रैखिक सरणी एवं लिंक्ड लिस्ट क्रमागत बनाम नोड-आधारित मेमोरी मॉडल • 1D एवं 2D ऐरे: Row-Major एवं Column-Major पता संगणना • एकल लिंक्ड लिस्ट (SLL): Data व Next पॉइंटर नोड • द्वैत लिंक्ड लिस्ट (DLL): Prev एवं Next द्विदिश नेविगेशन • प्रविष्टि एवं निष्कासन: पॉइंटर हेरफेर द्वारा O(1) दक्षता SLL: [Data|Next] -> [Data|Next] -> NULL | DLL: NULL <- [Prev|Data|Next] <-> [Data] -> चरण 2: स्टैक डेटा संरचना (LIFO) अंतिम प्रविष्ट प्रथम निर्गम एवं व्यंजक मूल्यांकन • एकल शीर्ष सूचक: Top पॉइंटर, Push एवं Pop संचालन • सीमा स्थितियां: ओवरफ्लो (Overflow) एवं अंडरफ्लो (Underflow) • इनफिक्स से पोस्टफिक्स रूपांतरण एवं RPN ऑपरेटर स्टैक • फ़ंक्शन कॉल स्टैक, पुनरावर्तन (Recursion) व कोष्ठक संतुलन PUSH: top += 1; S[top]=item | POP: item=S[top]; top -= 1 | LIFO DISCIPLINE चरण 3: क्यू डेटा संरचना (FIFO) प्रथम प्रविष्ट प्रथम निर्गम एवं चक्रीय संरचना • द्वैध सूचक तंत्र: Front (विलोपन) एवं Rear (प्रविष्टि) • रैखिक क्यू सीमाएं बनाम वृत्ताकार क्यू: (Rear+1)%N मॉडल • डबल-एंडेड क्यू (Deque) एवं प्राथमिकता क्यू (Priority Queue) • पायथन में deque बनाम List pop(0): O(1) बनाम O(n) गति ENQUEUE: rear=(rear+1)%N | DEQUEUE: front=(front+1)%N | FULL: (rear+1)%N == front चरण 4: गैर-रैखिक ट्री एवं BST वास्तुकला पदानुक्रमित संरचना एवं बाइनरी सर्च ट्री • रूट (Root), जनक (Parent), संतति (Child) व पर्ण (Leaf) नोड्स • ट्री ट्रैवर्सल: Pre-order (DLR), In-order (LDR), Post-order (LRD) • BST नियम: बायाँ सबट्री < मूल नोड < दायाँ सबट्री • खोज व प्रविष्टि समय जटिलता: औसत स्थिति में O(log n) IN-ORDER(BST) = SORTED KEYS | SEARCH(x): if x < root: Left else: Right | O(h) डेटा संरचना इंजन: मेमोरी संगठन • समय जटिलता • कुशल एल्गोरिदम LIFO (STACK) • FIFO (QUEUE) • NODE POINTERS • HIERARCHICAL TREES • O(1) & O(LOG N)

अध्याय का सार संक्षेप एवं 10 मुख्य निष्कर्ष

मुख्य बिंदु 1
डेटा संरचना मेमोरी में डेटा को कुशलतापूर्वक संग्रहीत और संसाधित करने का तार्किक मॉडल है।
मुख्य बिंदु 2
रैखिक संरचनाओं (ऐरे, स्टैक, क्यू, लिंक्ड लिस्ट) में तत्व एक सीधी शृंखला में जुड़े होते हैं।
मुख्य बिंदु 3
गैर-रैखिक संरचनाओं (ट्री, ग्राफ) में तत्व बहु-स्तरीय या जालिका संबंध में व्यवस्थित होते हैं।
मुख्य बिंदु 4
बाइनरी सर्च केवल सॉर्टेड डेटा पर कार्य करती है और O(log2 n) समय में तेज खोज सुनिश्चित करती है।
मुख्य बिंदु 5
स्टैक Last-In, First-Out (LIFO) सिद्धांत पर कार्य करता है और सभी संक्रियाएं 'top' पॉइंटर पर होती हैं।
मुख्य बिंदु 6
क्यू First-In, First-Out (FIFO) सिद्धांत पर कार्य करती है; प्रविष्टि Rear पर एवं विलोपन Front पर होता है।
मुख्य बिंदु 7
वृत्ताकार क्यू मॉड्यूलस गणित (ptr + 1) % MAX द्वारा रैखिक क्यू के फॉल्स ओवरफ्लो दोष को दूर करती है।
मुख्य बिंदु 8
लिंक्ड लिस्ट डायनामिक हीप मेमोरी का उपयोग करती है, जिससे आरंभ में O(1) में प्रविष्टि व विलोपन संभव होता है।
मुख्य बिंदु 9
बाइनरी सर्च ट्री (BST) में बाएँ सब-ट्री के मान रूट से छोटे तथा दाएँ सब-ट्री के मान रूट से बड़े होते हैं।
मुख्य बिंदु 10
किसी भी बाइनरी सर्च ट्री का In-order ट्रैवर्सल (बायाँ -> रूट -> दायाँ) तत्वों को सदैव सॉर्टेड आरोही क्रम में देता है।

स्व-मूल्यांकन अभ्यास (Check Your Understanding)

मूल वैचारिक स्पष्टता की जांच के लिए नैदानिक प्रश्न। पहले स्वयं हल करें, फिर उत्तर देखें।

1
अमूर्त डेटा प्रकार (ADT) और वास्तविक डेटा संरचना में क्या अंतर है?
उत्तर एवं व्याख्या देखें
उत्तर: ADT एक उच्च-स्तरीय सैद्धांतिक विवरण है जो यह बताता है कि डेटा पर क्या संक्रियाएं होंगी बिना यह बताए कि मेमोरी में वे कैसे होंगी (जैसे स्टैक ADT केवल push और pop को परिभाषित करता है)। जबकि डेटा संरचना किसी प्रोग्रामिंग भाषा में उसका वास्तविक मेमोरी कार्यान्वयन है।
इंटरफेस विवरण और मेमोरी कार्यान्वयन के अंतर पर विचार करें।
2
एक 2D ऐरे B[1..10][1..20] रो-मेजर ऑर्डर में 1000 बेस एड्रेस पर है। प्रत्येक तत्व 2 बाइट का हो तो B[4][7] का पता निकालें।
उत्तर एवं व्याख्या देखें
उत्तर: Address(B[4][7]) = 1000 + 2 * [20 * (4 - 1) + (7 - 1)] = 1000 + 2 * [20 * 3 + 6] = 1000 + 2 * [60 + 6] = 1000 + 2 * 66 = 1000 + 132 = 1132।
रो-मेजर सूत्र: Address = B + W * [C * (i - LBR) + (j - LBC)]। यहाँ C = 20, LBR = 1, LBC = 1।
3
इनफिक्स व्यंजक (A + B * C) / (D - E) को पोस्टफिक्स में रूपांतरित कीजिए।
उत्तर एवं व्याख्या देखें
उत्तर: (A + B * C) का मान A B C * + होगा; (D - E) का मान D E - होगा; अंत में / जोड़ने पर: A B C * + D E - / प्राप्त होगा।
कोष्ठक के भीतर गुणा पहले होगा, फिर जोड़; अंत में भाग का ऑपरेटर आएगा।
4
पायथन की मानक लिस्ट में 'lst.pop(0)' का प्रयोग क्यू के रूप में अकुशल क्यों माना जाता है?
उत्तर एवं व्याख्या देखें
उत्तर: पायथन लिस्ट एक सन्निहित ऐरे है। इंडेक्स 0 से तत्व हटाने पर शेष (n - 1) तत्वों को एक स्थान बाएँ खिसकना पड़ता है, जिससे O(n) रैखिक समय लगता है। अतः O(1) गति हेतु 'collections.deque' का प्रयोग करना चाहिए।
पहले तत्व को हटाने के बाद मेमोरी में शेष तत्वों के साथ क्या होता है?
5
यदि किसी बाइनरी ट्री का Post-order D, E, B, F, C, A और In-order D, B, E, A, F, C हो तो रूट नोड और उसका बायाँ बच्चा कौन सा है?
उत्तर एवं व्याख्या देखें
उत्तर: पोस्ट-ऑर्डर का अंतिम तत्व 'A' रूट नोड है। इन-ऑर्डर में 'A' के बाएँ {D, B, E} बायाँ सब-ट्री है। पोस्ट-ऑर्डर में {D, B, E} में अंत में 'B' आता है, अतः 'B' रूट A का प्रत्यक्ष बायाँ बच्चा है।
पोस्ट-ऑर्डर में रूट अंत में होता है। इन-ऑर्डर में यह रूट बाएँ और दाएँ सब-ट्री को विभाजित करता है।
अध्याय का अध्ययन पूर्ण हुआ?
अभ्यास के लिए तैयार?

ऑनलाइन CBT टेस्ट देकर तैयारी का मूल्यांकन करें

WBB परीक्षा पैटर्न पर आधारित बहुविकल्पीय प्रश्नों का ऑनलाइन टेस्ट दें। तुरंत परिणाम, समय विश्लेषण और प्रत्येक प्रश्न का विस्तृत हल प्राप्त करें।

STAY UPDATED

Get the Latest Updates

New test series, syllabus updates, exam notifications and more.

Syllabus
Updates
Exam
Alerts
Study
Resources