Site icon Gyanodhan

Unit 3: Programming and data structure


🔹 Programming क्या होता है?

Programming एक प्रक्रिया है जिसमें हम कंप्यूटर को निर्देश (instructions) देते हैं ताकि वह कोई विशेष काम कर सके। ये निर्देश हम किसी programming language जैसे C, C++, Python, Java में लिखते हैं।

🧠 Basic Concepts:

  1. Variable – एक container होता है जिसमें हम data store करते हैं।
    🧾 उदाहरण: int age = 20;
  2. Data Types – यह data के प्रकार को दर्शाता है:
    • int → पूर्णांक
    • float → दशमलव संख्या
    • char → एक character
    • string → टेक्स्ट
    • bool → true/false मान
  3. Operators – ये गणितीय और तर्कसंगत operations के लिए होते हैं:
    • +, -, *, /, % (Arithmetic Operators)
    • ==, !=, <, > (Comparison Operators)
  4. Conditionals – जब हमें किसी condition के आधार पर निर्णय लेना हो: if (age >= 18) { cout << "आप वोट कर सकते हैं"; } else { cout << "आप वोट नहीं कर सकते"; }

5. Loops – जब कोई कार्य बार-बार दोहराना हो:


    🔹 Data Structures क्या होते हैं?

    Data Structures वो तरीके हैं जिनसे हम data को memory में संगठित (organize) करते हैं ताकि उसपर fast और efficient operations किए जा सकें।

    📚 मुख्य Data Structures:

    1. Array
      • एक निश्चित आकार का एकसमान प्रकार के data का संग्रह
      • उदाहरण: int arr[5] = {1, 2, 3, 4, 5};
    2. Linked List
      • data blocks (nodes) जो एक-दूसरे से pointers द्वारा जुड़े होते हैं
      • लचीला आकार लेकिन थोड़ा जटिल
    3. Stack (LIFO – Last In First Out)
      • जो अंतिम में आता है, वही पहले बाहर जाता है
      • उदाहरण: undo ऑप्शन
    4. Queue (FIFO – First In First Out)
      • जो पहले आता है, वही पहले जाता है
      • उदाहरण: टिकट की लाइन
    5. Tree
      • एक hierarchical संरचना (structure)
      • उदाहरण: family tree या folder structure
    6. Graph
      • nodes और edges का समूह
      • उदाहरण: Google Maps या सोशल नेटवर्क

    🔹 Common Algorithms:

    1. Sorting – डेटा को क्रमबद्ध करना
      • जैसे: Bubble Sort, Selection Sort, Merge Sort
    2. Searching – किसी डेटा को ढूंढना
      • जैसे: Linear Search, Binary Search
    3. Recursion – जब कोई function खुद को call करता है
    4. Dynamic Programming – जटिल समस्याओं को छोटे हिस्सों में बाँटना

    📘 Programming and Data Structures – Hinglish Notes

    1. Data, Entity, Information

    2. Difference between Data and Information

    3. Data Type (डेटा प्रकार)

    4. Built-in Data Types (इनबिल्ट डेटा टाइप्स)

    5. Abstract Data Type (ADT)

    6. Definition of Data Structures

    7. Types of Data Structures

    👉 Linear & Non-Linear:


    8. Introduction to Algorithms

    9. Definition of Algorithm

    10. Difference between Algorithm and Program

    11. Properties of Algorithm

    1. Input
    2. Output
    3. Finiteness
    4. Effectiveness
    5. Definiteness

    12. Algorithm Design Techniques


    13. Performance Analysis of Algorithms

    14. Complexity of Code Structures

    15. Order of Growth

    16. Asymptotic Notations



    🧮 Arrays (एरेज़)

    🔹 Definition:

    Array एक डेटा संरचना है जिसमें एक जैसे प्रकार के डेटा को क्रमबद्ध (sequence में) तरीके से स्टोर किया जाता है।


    🔹 Types of Arrays:

    1. Single Dimensional Array (एक-आयामी एरे):
      जैसे – int arr[5] = {1, 2, 3, 4, 5};
    2. Multidimensional Array (बहु-आयामी एरे):
      जैसे – 2D array: int arr[2][3] = {{1,2,3},{4,5,6}};

    🔹 Representation of Arrays:

    1. Row Major Order (रो मेजर ऑर्डर):
      डेटा को row by row memory में स्टोर किया जाता है।
    2. Column Major Order (कॉलम मेजर ऑर्डर):
      डेटा को column by column memory में स्टोर किया जाता है।

    🔹 Index Formula (इंडेक्स सूत्र):


    🔹 Applications of Arrays (एरेज़ के उपयोग):


    🔹 Sparse Matrix (स्पार्स मैट्रिक्स):


    🔁 Recursion (रिकर्शन)

    🔹 Definition:

    जब कोई function खुद को call करता है, उसे recursion कहते हैं।


    🔹 Topics:

    1. Recursion in C
      • जैसे factorial, Fibonacci series आदि को recursion से हल करना।
    2. Example of Recursion int factorial(int n) { if (n == 0) return 1; else return n * factorial(n - 1); }
    3. Tower of Hanoi Problem
      • Classic recursive problem तीन pegs और कई disks के साथ।
    4. Simulating Recursion
      • Stack का उपयोग कर के recursion को iterative तरीके से simulate करना।
    5. Backtracking (बैकट्रैकिंग)
      • एक recursive तकनीक जिसमें हम गलत रास्ते से लौट कर सही रास्ता खोजते हैं।
      • उदाहरण: N-Queens problem, Maze solving
    6. Recursive Algorithms
      • Algorithms जो recursion का उपयोग करते हैं जैसे Merge Sort, Quick Sort
    7. Principles of Recursion
      • Base Case
      • Recursive Case
      • Progress towards base case


    🔗 Linked Lists (लिंक्ड लिस्ट्स)

    🔹 Array vs Pointer Implementation:


    🔹 Types of Linked Lists:

    1. Singly Linked List (सिंगली लिंक्ड लिस्ट):
      हर node में data और next pointer होता है।
      👉 Traversal केवल एक दिशा में।
    2. Doubly Linked List (डबल्ली लिंक्ड लिस्ट):
      हर node में next और previous दो pointers होते हैं।
      👉 Traversal दोनों दिशाओं में।
    3. Circularly Linked List (सर्कुलर लिंक्ड लिस्ट):
      लास्ट node का pointer first node को point करता है।
      👉 List एक circle में घूमती है।

    🔹 Operations on a Linked List (ऑपरेशंस):

    1. Insertion (डाटा जोड़ना):
      • Beginning, End, या किसी position पर
    2. Deletion (डाटा हटाना):
      • Specific node, first, या last node
    3. Traversal (ट्रैवर्सल):
      • एक-एक node पर जाकर पूरा list पढ़ना

    🔹 Polynomial Representation using Linked List:


    🔹 Polynomial Operations:

    1. Addition (जोड़): दो polynomials के like terms को जोड़ना
    2. Subtraction (घटाव): like terms को घटाना
    3. Multiplication (गुणा): हर term को दूसरे polynomial की हर term से multiply करना


    🥞 Stack (स्टैक)

    🔹 Abstract Data Type (ADT):

    Stack एक ADT है जिसमें डेटा Last In, First Out (LIFO) order में रखा जाता है।
    👉 मतलब जो सबसे बाद में डाला जाता है, वही सबसे पहले निकलेगा।


    🔹 Primitive Stack Operations:

    1. Push (डाटा डालना)
      – Stack में element जोड़ना।
    2. Pop (डाटा निकालना)
      – Stack से सबसे ऊपर का element हटाना।

    🔹 Implementation in C:

    1. Array Implementation:
      • Stack को एक array की मदद से बनाया जाता है।
    2. Linked List Implementation:
      • हर node में data और next pointer होता है, जिससे dynamic size मिलती है।

    🔹 Applications of Stack:

    1. Prefix & Postfix Expressions (पूर्वसूचक और पश्चसूचक एक्सप्रेशन्स)
      • Stack का उपयोग इन expressions को evaluate करने में होता है।
    2. Evaluation of Postfix Expression:
      • Expression जैसे 23*54*+9- को Stack से solve किया जाता है।

    🔁 Recursion (रिकर्शन)

    🔹 Iteration vs Recursion:


    🔹 Principles of Recursion (रिकर्शन के सिद्धांत):

    1. Base Case: कब रुकना है
    2. Recursive Case: खुद को call करना
    3. Progress: हर बार target के पास जाना

    🔹 Tail Recursion (टेल रिकर्शन):


    🔹 Removal of Recursion Problem:


    🧠 Problem Solving Using Iteration and Recursion

    1. Binary Search:
      Recursion और iteration दोनों से implement किया जा सकता है।
      🔍 Divide and Conquer algorithm
    2. Fibonacci Numbers:
      • Recursion: fib(n) = fib(n-1) + fib(n-2)
      • Iteration: Loop से calculate किया जाता है
    3. Tower of Hanoi:
      Recursive method से solve किया जाता है।
      👉 Classic example of recursion with 3 pegs and n disks.

    Great! This image covers Queue and its operations. Here’s the full explanation in Hinglish (English + हिंदी में Devanagari script):


    📥 Queue (क्यू)

    Queue एक Linear Data Structure है जो FIFO (First In, First Out) principle पर काम करता है।
    👉 जो item पहले डाला गया, वही पहले निकलेगा — जैसे टिकट की लाइन।


    🔹 Operations on Queue:

    1. Create (निर्माण):
      नया empty queue बनाना।
    2. Add / Enqueue (डालना):
      Queue के पीछे नया element जोड़ना।
    3. Delete / Dequeue (निकालना):
      Queue के आगे से element हटाना।
    4. Full (पूरा भरना):
      जब queue में और element नहीं जोड़े जा सकते।
    5. Empty (खाली):
      जब queue में कोई भी element नहीं होता।

    🔹 Types of Queues:

    1. Linear Queue (रेखीय क्यू):
      Simple queue जिसमें insertion पीछे से और deletion आगे से होता है।
    2. Circular Queue (वृत्ताकार क्यू):
      आखिरी position के बाद वापस पहले position पर insert किया जा सकता है।
      👉 Space wastage को रोकता है।
    3. Deque (Double Ended Queue):
      इसमें insertion और deletion दोनों ends (front और rear) से हो सकता है।
    4. Priority Queue (प्राथमिकता क्यू):
      Element को उनकी priority के अनुसार process किया जाता है — ना कि arrival order के अनुसार।

    🔹 Implementation in C:

    1. Array Implementation:
      • Fixed size का queue
      • Static memory allocation
    2. Linked List Implementation:
      • Dynamically growing queue
      • Front और rear pointers का इस्तेमाल होता है

    🔚 Summary:


    अगर आप चाहें तो मैं इन सभी queues के C language में कोड, diagrams, और dry run examples भी बना सकता हूँ। बताइए क्या चाहिए?


    1. खोज (Searching) का सिद्धान्त

    खोज का अर्थ है किसी दिए गए तत्व (जिसे कुंजी या key कहते हैं) को किसी डाटा संरचना (जैसे सरणी, सूची, फ़ाइल, या डाटाबेस) में ढूँढना।


    2. क्रमिक खोज (Sequential Search / Linear Search)

    उदाहरण:

    सरणी: [12, 45, 7, 33]
    कुंजी: 33
    जाँच: 12 → 45 → 7 → 33 → मिल गया, स्थान 4
    

    3. सूचकांक क्रमिक खोज (Index Sequential Search)


    4. द्विआधारी खोज (Binary Search)


    5. हैशिंग (Hashing) का सिद्धान्त

    उदाहरण:

    हैश फलन: स्थान = कुंजी % 10
    कुंजी: 27 → 27 % 10 = 7 → स्थान 7 पर संग्रहित/खोजें
    

    6. टकराव (Collision)

    उदाहरण:

    27 % 10 = 7
    37 % 10 = 7
    

    दोनों स्थान 7 पर जाएँगे → टकराव।


    7. टकराव निवारण विधियाँ (Collision Resolution Techniques)

    (क) खुला संबोधन (Open Addressing)

    (ख) श्रंखला पद्धति (Chaining)

    (ग) पुनः हैशिंग (Rehashing)


    ठीक है, अब मैं आपको यह पूरा Sorting का टॉपिक शुद्ध हिन्दी में लिखकर देता हूँ।


    1. प्रविष्टि क्रम (Insertion Sort)

    सिद्धान्त → एक-एक करके तत्वों को लिया जाता है और उन्हें पहले से क्रमबद्ध भाग में सही स्थान पर प्रविष्ट किया जाता है (जैसे हम ताश के पत्तों को क्रमबद्ध करते हैं)।

    चरण:

    1. पहले तत्व को क्रमबद्ध मान लें।
    2. अगला तत्व लें और उसे क्रमबद्ध भाग में उचित स्थान पर प्रविष्ट करें (इसके लिए कुछ तत्वों को आगे खिसकाना पड़ सकता है)।
    3. यह प्रक्रिया तब तक दोहराएँ जब तक सभी तत्व क्रमबद्ध न हो जाएँ।

    2. चयन क्रम (Selection Sort)

    सिद्धान्त → प्रत्येक बार सबसे छोटा तत्व ढूँढकर उसे सही स्थान पर रख देना।

    चरण:

    1. पूरी सरणी में सबसे छोटा तत्व ढूँढें और उसे प्रथम स्थान के तत्व से अदला-बदली करें।
    2. दूसरे स्थान से पुनः सबसे छोटा तत्व ढूँढें और अदला-बदली करें।
    3. इसी प्रकार पूरी सूची को क्रमबद्ध करें।

    3. बुलबुला क्रम (Bubble Sort)

    सिद्धान्त → बार-बार पास-पास के तत्वों की तुलना करना और यदि वे गलत क्रम में हैं तो उनकी अदला-बदली करना (बड़े तत्व ऊपर “बुलबुला” की तरह आ जाते हैं)।

    चरण:

    1. पहले तत्व से तुलना आरम्भ करें, अगले से मिलाएँ।
    2. यदि क्रम गलत है तो अदला-बदली करें।
    3. एक चक्र पूरा होने पर सबसे बड़ा तत्व सूची के अंत में पहुँच जाएगा।
    4. शेष सूची के लिए प्रक्रिया दोहराएँ।

    4. ढेर क्रम (Heap Sort)

    सिद्धान्त → अधिकतम-ढेर (Max-Heap) संरचना बनाकर सबसे बड़े तत्व को बार-बार निकालना।

    चरण:

    1. सरणी को अधिकतम-ढेर में बदलें।
    2. मूल (root) तत्व को अंतिम तत्व से अदला-बदली करें, ढेर का आकार 1 घटाएँ।
    3. पुनः ढेर को व्यवस्थित करें (heapify)।
    4. तब तक दोहराएँ जब तक सभी तत्व क्रमबद्ध न हो जाएँ।

    5. क्रमण विधियों की तुलना

    क्रमण विधिसर्वोत्तम समयसबसे ख़राब समयस्थानस्थिरताटिप्पणी
    प्रविष्टि क्रमO(n)O(n²)O(1)हाँछोटे डाटा के लिए अच्छा
    चयन क्रमO(n²)O(n²)O(1)नहींन्यूनतम अदला-बदली, पर धीमा
    बुलबुला क्रमO(n)O(n²)O(1)हाँसरल, पर व्यवहार में कम
    ढेर क्रमO(n log n)O(n log n)O(1)नहींबड़े डाटा के लिए उपयुक्त

    6. रैखिक समय में क्रमण (Sorting in Linear Time)

    (क) गणना क्रम (Counting Sort)

    चरण:

    1. सीमा के अनुसार गणना-सरणी (count array) बनाएँ।
    2. प्रत्येक तत्व की संख्या गिनें।
    3. संचयी योग (prefix sum) लें → स्थान प्राप्त होंगे।
    4. परिणाम-सरणी में तत्व रखें।

    (ख) बाल्टी क्रम (Bucket Sort)

    चरण:

    1. सीमा के अनुसार बाल्टियाँ बनाएँ।
    2. तत्वों को उनकी बाल्टी में डालें।
    3. प्रत्येक बाल्टी को क्रमबद्ध करें (जैसे प्रविष्टि क्रम से)।
    4. सभी बाल्टियों को जोड़ दें।

    अगर आप चाहें तो मैं इन सभी Sorting Algorithms के चित्र (diagrams) और चरण-दर-चरण सूखी रनिंग (dry run) उदाहरण भी बना सकता हूँ, जिससे ये और स्पष्ट हो जाएँ।
    क्या आप चाहते हैं कि मैं वो बना दूँ?


    1. ग्राफ से जुड़ी पारिभाषिक शब्दावली (Terminology used with Graph)

    1. शीर्ष / नोड (Vertex / Node) – ग्राफ का एक बिंदु, जहाँ से रेखाएँ (edges) जुड़ती हैं।
    2. धनु / धार (Edge) – दो शीर्षों के बीच का संबंध या रेखा।
    3. सन्निकट शीर्ष (Adjacent Vertices) – ऐसे दो शीर्ष जिनके बीच प्रत्यक्ष धार हो।
    4. डिग्री (Degree) – किसी शीर्ष से जुड़ी धारों की संख्या।
      • In-degree – किसी शीर्ष पर आने वाली धारों की संख्या।
      • Out-degree – किसी शीर्ष से जाने वाली धारों की संख्या।
    5. पथ (Path) – शीर्षों और धारों का क्रमबद्ध अनुक्रम।
    6. चक्र (Cycle) – ऐसा पथ जो एक ही शीर्ष से प्रारम्भ होकर उसी पर समाप्त हो और बीच में कोई शीर्ष दोहराया न जाए।
    7. सरल ग्राफ (Simple Graph) – जिसमें कोई self-loop और parallel edge न हो।
    8. वजनित ग्राफ (Weighted Graph) – जिसमें धारों के साथ भार (weight) जुड़ा हो।
    9. संपर्कित ग्राफ (Connected Graph) – जिसमें हर शीर्ष दूसरे शीर्ष से किसी पथ द्वारा जुड़ा हो।

    2. ग्राफ के निरूपण के लिए डाटा संरचनाएँ (Data Structure for Graph Representation)

    (क) सन्निकटता मैट्रिक्स (Adjacency Matrix)


    (ख) सन्निकटता सूची (Adjacency List)


    (ग) सन्निकटता बहु-सूची (Adjacency Multilist)


    3. ग्राफ का परिभ्रमण (Graph Traversal)

    Traversal का अर्थ है सभी शीर्षों को किसी क्रम से विज़िट करना।

    (क) गहराई-प्रथम खोज (Depth First Search – DFS)


    (ख) चौड़ाई-प्रथम खोज (Breadth First Search – BFS)


    4. संपर्कित घटक (Connected Component)



    1. ट्री से संबंधित मूल शब्दावली (Basic Terminology used with Tree)


    2. बाइनरी ट्री (Binary Tree)

    परिभाषा:
    एक ऐसा ट्री जिसमें प्रत्येक नोड के अधिकतम दो बच्चे हो सकते हैं – Left Child और Right Child


    3. बाइनरी ट्री का निरूपण (Binary Tree Representation)

    (A) Array Representation

    समस्या: Sparse (खाली जगह वाले) ट्री में Memory Waste होती है।


    (B) Pointer (Linked List) Representation


    4. बाइनरी सर्च ट्री (BST – Binary Search Tree)

    नियम:


    5. Complete Binary Tree (पूर्ण बाइनरी ट्री)


    6. Extended Binary Tree (विस्तारित बाइनरी ट्री)


    7. Tree Traversal Algorithms (ट्री का भ्रमण)

    1. Inorder (Left → Root → Right)
    2. Preorder (Root → Left → Right)
    3. Postorder (Left → Right → Root)

    8. Constructing Binary Tree from Traversals


    9. BST में ऑपरेशन्स


    10. Threaded Binary Tree


    11. Huffman Coding using Binary Tree


    12. AVL Tree (Self-Balancing BST)


    13. B Tree


    References:

    1.https://www3.ntu.edu.sg/home/ehchua/programming/index.html

    Exit mobile version