INSERTING New NODE at the End of the LIST Example – पिछले Post के Concept के आधार पर एक और Program निम्नानुसार है, जिसमें विधार्थीयों के Records को Linked List व Dynamic Memory Allocation के माध्यम से Input किया गया है, Memory में Store किया गया है और अन्त में सभी Input किए गए Data Items को Display किया गया है-
[code] Program #include <stdio.h> #include <conio.h> #include <alloc.h> struct stud { int roll_no; long int pin_code; struct stud *next_rec; }; struct stud *start = NULL; main() { struct stud *newnode,*ptr; char choice= 'y'; clrscr(); while(choice=='y' || choice=='Y') { newnode=(struct stud *)malloc(sizeof(struct stud)); newnode->next_rec=NULL; printf("\n Enter Roll Number : " ); scanf("%d", &newnode->roll_no); printf("\n Enter Pincode: "); scanf("%ld", &newnode->pin_code); if ( start == NULL) start = newnode; else { newnode->next_rec = start; start = newnode; } printf("\n Do You wish to Continuous ? Y/N "); fflush(stdin); choice = getchar(); } ptr = start; while(ptr) { printf("\n Roll Number \t %d", ptr->roll_no); printf("\n Pin Code \t %ld", ptr->pin_code); ptr = ptr->next_rec; } free(ptr); free(start); free(newnode); getch(); } Output Enter Roll Number : 1 Enter Pincode: 111111 Do You wish to Continuous ? Y/N y Enter Roll Number : 2 Enter Pincode: 222222 Do You wish to Continuous ? Y/N y Enter Roll Number : 3 Enter Pincode: 333333 Do You wish to Continuous ? Y/N y Enter Roll Number : 4 Enter Pincode: 444444 Do You wish to Continuous ? Y/N y Enter Roll Number : 5 Enter Pincode: 555555 Do You wish to Continuous ? Y/N n Roll Number 5 Pin Code 555555 Roll Number 4 Pin Code 444444 Roll Number 3 Pin Code 333333 Roll Number 2 Pin Code 222222 Roll Number 1 Pin Code 111111 [/code]
इस प्रोग्राम में Structure बनाने के बाद Structure में कोई Link List नहीं है। इसलिये Linked List की शुरूआत के start Pointer को NULL किया गया है। आवश्यकतानुसार कई node बनाने व उन्हें Linked List में जोडने के लिये हमने while loop का प्रयोग किया है।
इस Loop में सबसे पहले एक Memory Block बनाया गया है और उस Memory Block का Address newnode नाम के var को दिया गया है। फिर newnode->next_rec=NULL; statement द्वारा इस बनाई गई node को Linked List का अंतिम node बनाया गया है। फिर इस node में Pointer new द्वारा मान Input किया गया है।
if (start = = NULL) statement द्वारा ये check किया जाता है कि क्या start का मान NULL है या नहीं। ये इसलिये check किया जाता है क्योंकि यदि Linked List में add किया जाने वाला node Linked List का प्रथम node है, तो start का मान NULL होता है। यहां Linked List में Add होने वाला newnode पहला node है। इसलिये start का मान NULL ही होगा और if condition सत्य होगी। यदि if Condition सत्य होती है, तो इस node को Liked list का पहला node बनाने के लिये इस node का Address start = newnode; statement द्वारा start को दिया गया है। इस प्रकार से Linked List शुरू हो जाती है।
अब while loop हमसे पूंछता है कि क्या हम और Records Input करना चाहते हैं।
यदि हम यहां Y Press करते हैं तो वापस एक Memory Block बनाता है और वापस उस Memory Block का Address newnode को प्राप्त होता है। इस नई node के Member next_rec को वापस NULL कर दिया जाता है। वापस if condition check होती है।
चूंकि Linked List शुरू हो चुकी है इसलिये if condition असत्य हो जाती है और else के statements का Execution होता है। यहां newnode->next_rec = start; statement द्वारा इस नई node के next_rec में Stored NULL को हटा कर NULL के स्थान पर start में स्थित Address को डाल दिया जाता है और start = newnode; statement द्वारा start में नए node का Address डाल दिया जाता है।
इस प्रकार जितनी बार Loop चलता है, उतनी ही बार start में उस नए node का Address आ जाता है और इस नए node में next_rec में उस node का Address डाल दिया जाता है, जो कि while loop के पिछले Iteration में बना था।
Dynamic Memory Allocation मे सारा काम Allocated Memory के Address को store करने वाले Pointer द्वारा किया जाता है। इसलिये Address तब तक बढता रहता है, जब तक कि User मान Input करता है। इसलिये वापस इन मानों को read करने के लिये एक Pointer ptr को Linked List का पहला Address यानी start का Address दिया गया है और वापस एक while loop को तब तक चलाया गया है जब तक कि ptr में कोई मान होता है।
इस प्रकार से start में जोडे गए अंतिम node का Address होता है, इसलिये printf(“\n Roll Number \t %d”, ptr->roll_no); व printf(“\n Pin Code \t %ld”, ptr->pin_code); statements द्वारा प्रथम node के मानों को Print करवाया जाता है। फिर ptr = ptr->next_rec statement द्वारा ptr अगले node का Address store करवाया जाता है। loop की Condition सत्य होती है और दूसरे node के मान Screen पर print हो जाते हैं। ptr = ptr->next_rec statement अब तीसरे node के मानों को print करता है।
यही क्रम तब तक चलता रहता है, जब तक कि while loop Terminate ना हो जाए और loop तब Terminate होता है, जब ptr अंतिम node के मानों को print करता है। उस समय अंतिम node के next_rec का मान NULL होता है यानी while का मान while(0) हो जाता है।
यहां आपने देखा कि जो मान सबसे अंत में Input किया था वह मान सबसे पहले प्राप्त होता है और जो मान सबसे पहले Input किया था वह मान सबसे बाद में प्राप्त होता है। इस प्रक्रिया को LIFO (Last In First Out) कहते हैं।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Data Structure and Algorithms in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Data Structure and Algorithms in Hindi | Page: 433 | Format: PDF