Traversal और Search
List में आगे बढ़ें
Traversal और Search, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सूची में आगे बढ़ना
क्रमिक भ्रमण का अर्थ है प्रत्येक नोड पर क्रम से जाना। आप head से शुरू करके next पॉइंटरों का अनुसरण करते हैं, जब तक NULL तक न पहुँच जाएँ।
लगभग हर सूची एल्गोरिदम इसी सरल भ्रमण पर आधारित होता है।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int main(void) {
struct Node *head = make(10);
head->next = make(20);
for (struct Node *p = head; p != NULL; p = p->next)
printf("%d ", p->value);
printf("\n");
return 0;
}भ्रमण का प्रारूप
मानक लूप में एक गतिशील पॉइंटर p का उपयोग होता है: उसे head पर प्रारंभ कीजिए, जब तक p NULL न हो तब तक चलते रहिए, और p = p->next से आगे बढ़ाइए।
आगे बढ़ते समय head में कभी बदलाव न कीजिए, वरना सूची का आरंभ खो जाएगा।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int main(void) {
struct Node *head = make(1);
head->next = make(2);
struct Node *p = head;
while (p) { printf("%d ", p->value); p = p->next; }
printf("\n");
return 0;
}नोडों की गिनती करना
लंबाई ज्ञात करने के लिए सूची में आगे बढ़िए और प्रत्येक नोड के लिए एक काउंटर बढ़ाइए।
यह O(n) क्रिया है, क्योंकि गिनती कहीं संग्रहीत नहीं होती।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int length(struct Node *head) {
int n = 0;
for (struct Node *p = head; p; p = p->next) n++;
return n;
}
int main(void) {
struct Node *head = make(1);
head->next = make(2);
head->next->next = make(3);
printf("length = %d\n", length(head));
return 0;
}मानों का योग करना
भ्रमण से डेटा का समुच्चयन किया जा सकता है। यहाँ हम सूची के सभी पूर्णांक मानों को जोड़ते हैं।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int main(void) {
struct Node *head = make(5);
head->next = make(10);
int sum = 0;
for (struct Node *p = head; p; p = p->next) sum += p->value;
printf("sum = %d\n", sum);
return 0;
}किसी मान को खोजना
किसी मान को खोजने के लिए सूची में आगे बढ़िए और प्रत्येक नोड की तुलना कीजिए। मिलान मिलने पर नोड या उसका स्थान लौटाइए, या अंत तक पहुँचने पर विफलता का संकेत दीजिए।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
struct Node *find(struct Node *head, int v) {
for (struct Node *p = head; p; p = p->next)
if (p->value == v) return p;
return NULL;
}
int main(void) {
struct Node *head = make(1);
head->next = make(2);
printf("found 2: %d\n", find(head, 2) != NULL);
printf("found 9: %d\n", find(head, 9) != NULL);
return 0;
}स्थान खोजना
कभी-कभी आप नोड के बजाय मिलान का इंडेक्स चाहते हैं। आगे बढ़ते समय एक काउंटर रखिए और मान मिलने पर उसे लौटा दीजिए।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int index_of(struct Node *head, int v) {
int i = 0;
for (struct Node *p = head; p; p = p->next, i++)
if (p->value == v) return i;
return -1;
}
int main(void) {
struct Node *head = make(7);
head->next = make(8);
printf("%d\n", index_of(head, 8));
return 0;
}nवें नोड तक पहुँचना
लिंक की गई सूचियों में सीधे इंडेक्स से पहुँचने की सुविधा नहीं होती। स्थान n तक पहुँचने के लिए head से n बार आगे बढ़ना पड़ता है।
इसी कारण ऐरे के O(1) की तुलना में यादृच्छिक पहुँच O(n) होती है।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
struct Node *at(struct Node *head, int n) {
struct Node *p = head;
for (int i = 0; i < n && p; i++) p = p->next;
return p;
}
int main(void) {
struct Node *head = make(10);
head->next = make(20);
head->next->next = make(30);
printf("%d\n", at(head, 2)->value);
return 0;
}अंतिम नोड खोजना
अंतिम नोड पाने के लिए तब तक आगे बढ़िए जब तक p->next NULL न हो जाए। वही नोड अंतिम है।
खाली सूची में सावधान रहिए, जहाँ स्वयं head NULL होता है।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int main(void) {
struct Node *head = make(1);
head->next = make(2);
head->next->next = make(3);
struct Node *p = head;
while (p->next) p = p->next;
printf("last = %d\n", p->value);
return 0;
}अधिकतम मान खोजना
खोज और समुच्चयन को मिलाकर, आप भ्रमण के दौरान अब तक के सर्वोत्तम मान को ट्रैक करते हुए सबसे बड़ा मान खोज सकते हैं।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
int main(void) {
struct Node *head = make(3);
head->next = make(9);
head->next->next = make(5);
int best = head->value;
for (struct Node *p = head->next; p; p = p->next)
if (p->value > best) best = p->value;
printf("max = %d\n", best);
return 0;
}पुनरावर्ती भ्रमण
सूचियों में पुनरावृत्ति से भी आगे बढ़ा जा सकता है: वर्तमान नोड को संसाधित कीजिए, फिर next पर पुनरावृत्ति कीजिए।
यह सुंदर तरीका है, लेकिन लंबाई के अनुपात में स्टैक स्थान का उपयोग करता है, इसलिए बहुत लंबी सूचियों के लिए पुनरावृत्त विधि अधिक सुरक्षित है।
#include <stdio.h>
#include <stdlib.h>
struct Node { int value; struct Node *next; };
struct Node *make(int v){struct Node*n=malloc(sizeof*n);n->value=v;n->next=NULL;return n;}
void print_rec(struct Node *p) {
if (!p) { printf("\n"); return; }
printf("%d ", p->value);
print_rec(p->next);
}
int main(void) {
struct Node *head = make(1);
head->next = make(2);
print_rec(head);
return 0;
}खाली सूचियों से बचाव
हर भ्रमण फ़ंक्शन को खाली सूची (head == NULL) को सही ढंग से संभालना चाहिए।
मानक लूप यह पहले से करता है: p != NULL शर्त तुरंत असत्य हो जाती है, इसलिए उसका भाग कभी नहीं चलता।
#include <stdio.h>
struct Node { int value; struct Node *next; };
int length(struct Node *head) {
int n = 0;
for (struct Node *p = head; p; p = p->next) n++;
return n;
}
int main(void) {
struct Node *head = NULL;
printf("empty length = %d\n", length(head));
return 0;
}त्वरित जाँच
सूची के भ्रमण की लागत की अपनी समझ जाँचिए।
पुनरावलोकन
आपने सूचियों में आगे बढ़ना और खोजना सीखा:
- भ्रमण का प्रारूप:
headसे शुरू कीजिए,NULLन होने तक लूप चलाइए, औरp = p->nextसे आगे बढ़िए। - गिनती करना, योग करना और अधिकतम मान खोजना—ये सभी भ्रमण पर आधारित हैं।
- खोज प्रत्येक नोड की तुलना करती है; इंडेक्स से पहुँचना O(n) है।
- भ्रमण पुनरावर्ती हो सकता है, लेकिन लंबी सूचियों के लिए पुनरावृत्त विधि अधिक सुरक्षित है; खाली स्थिति को हमेशा संभालिए।
एआई शिक्षक के साथ C सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 39
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “Traversal और Search” पाठ निःशुल्क है?
हाँ—“Traversal और Search” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Traversal और Search” में मैं क्या सीखूँगा?
List में आगे बढ़ें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Traversal और Search” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Singly Linked Lists
- Insertion और Deletion
- Traversal और Search
- Doubly Linked Lists