Insertion into a linked list

एक लिंक्ड सूची में नोड डालने के लिए तीन अलग-अलग संभावनाएं हैं। ये तीन संभावनाएँ हैं:

  1. Insertion at the beginning of the list.
  2. Insertion at the end of the list
  3. Inserting a new node except the above-mentioned positions
पहले मामले में, हम एक नया नोड बनाते हैं और मौजूदा सूची के प्रमुख के बगल में इंगित करते हैं और फिर सिर को नए जोड़े गए नोड में बदलते हैं। यह नीचे दिए गए चित्र के समान है।
निम्नलिखित चरणों का पालन इस प्रकार है:
 
·        एक नया नोड बनाएं
·        लिंक किए गए सूची के नए नोड के “Next” को “Head” की ओर इंगित करें।
·        नए नोड को “Head” के रूप में चिह्नित करें।
इस प्रकार, उपरोक्त चरणों का प्रतिनिधित्व करने वाला कोड है:
struct node* front(struct node *head,int value)
{
                   struct node *p;
                   p=malloc(sizeof(struct node));
                   p->data=value;
                   p->next=head;
                   return (p);
}
 
/*
main funtion will be something like:
main()
{
    head=front(head,10);
}
*/
 
कोड समझने में बहुत सरल है। हमने कोड की इन तीन पंक्तियों में एक नया नोड बनाया है:
 

struct node *p;
p=malloc(sizeof(struct node));
p->data=value;

p->next=head –इस पंक्ति में, हमने दूसरे चरण का अनुसरण किया है जो नए नोड के head नेक्स्ट ’को लिंक किए गए सूची के प्रमुख को इंगित करना है।

return (p);
head=front(head,10);

ये दो पंक्तियाँ नए नोड को 'हेड' के रूप में चिह्नित करने का हिस्सा हैं। हम अपने फ़ंक्शन से नया नोड लौटा रहे हैं और इसे मुख्य फ़ंक्शन में बना रहे हैं।
 
दूसरा मामला सबसे सरल है। हम मौजूदा सूची के अंत में एक नया नोड जोड़ते हैं। इसे नीचे दिए गए चित्र में दिखाया गया है:
इसलिए, यदि लिंक की गई सूची में अंत जोड़ने के चरण हैं:
 
एक नया नोड बनाएं
लिंक की गई सूची के अंतिम नोड को नए नोड में इंगित करें
और उपरोक्त चरणों का प्रतिनिधित्व करने वाले कोड हैं:
इसलिए, यदि लिंक की गई सूची में अंत जोड़ने के चरण हैं:
 
एक नया नोड बनाएं
लिंक की गई सूची के अंतिम नोड को नए नोड में इंगित करें   और उपरोक्त चरणों का प्रतिनिधित्व करने वाले कोड हैं:
end(struct node *head,int value)
{
    struct node *p,*q;
    p=malloc(sizeof(struct node));
    p->data=value;
    p->next=NULL;
    q=head;
    while(q->next!=NULL)
    {
        q = q->next;
    }
    q->next = p;
}
/*
    main function will contain something like:
    end(head,20);
*/

p=malloc(sizeof(struct node));
p->data=value;
p->next=NULL;

उपर्युक्त पंक्तियाँ बस एक नया नोड बना रही हैं।
while(q->next!=NULL)
{
 q = q->next;
}
हम सूची के अंतिम तत्व को the q ’बनाने के लिए कोड की उपरोक्त पंक्तियों का उपयोग करते हुए सूची के अंत में आगे बढ़ रहे हैं।
 
अब, q 'सूची का अंतिम तत्व है, इसलिए हम इसके आगे नया नोड जोड़ सकते हैं और हम लूप के बाद लिखे गए कोड द्वारा भी ऐसा कर रहे हैं:

q = q->next

 
तीसरा और आखिरी मामला थोड़ा जटिल है। किसी लिंक की गई सूची के बीच में नोड डालने के लिए, हमें पहले मौजूदा लिंक को तोड़ना होगा और फिर दो नए लिंक बनाने होंगे। यह नीचे दी गई तस्वीर से स्पष्ट होगा।
 
·        एक नया नोड बनाएं
·        नए नोड के नोड 'बी' के 'अगले' को इंगित करें (वह नोड जिसके बाद हमें नया नोड सम्मिलित करना होगा)। अब तक, दो नोड एक ही नोड 'बी', नोड 'ए' और नए नोड को इंगित कर रहे हैं।
नोड for a ’(जैसा कि चित्र में दिखाया गया है) के बाद नोड डालने के चरण हैं:
 
· नए नोड के लिए 'a' के 'अगला' को इंगित करें।
उपरोक्त चरणों के लिए कोड है:
after(struct node *a, int value)
{
    struct node *p;
    p = malloc(sizeof(struct node));
    p->data = value;
    /*
    if initial linked list is
     _______        _______        _______ 
    |   1   |____\ |   3   |____\ |   5   |____\ NULL
    |_______|    / |_______|    / |_______|    / 
    and new node's value is 10
    then the next line will do something like
     _______        _______        _______ 
    |   1   |____\ |   3   |____\ |   5   |____\ NULL
    |_______|    / |_______|    / |_______|    / 
                    / \
                     |
                     |
                  ___|___
                 |   10  |
                 |_______|
    */
    p->next = a->next;
    a->next = p;
    /*
    now the linked list will look like:
     _______       _______        _______        _______ 
    |   1   |____\|   10  |____\ |   3   |____\ |   5   |____\ NULL
    |_______|    /|_______|    / |_______|    / |_______|    / 
    */
}

p = malloc(sizeof(struct node));
p->data = value;

हम उपरोक्त पंक्तियों का उपयोग करके एक नया नोड बना रहे हैं।
p->next = a->next
हम नोड को इंगित करने के लिए नए नोड का 'अगला' बना रहे हैं जिसके बाद प्रविष्टि बनाई जानी है। बेहतर समझ के लिए टिप्पणियाँ देखें।
 
a->next = p
 
हम नए नोड के 'अगले' की ओर इशारा कर रहे हैं
 
पूरा कोड है:
#include <stdio.h>
#include <stdlib.h>
 
struct node
{
    int data;
    struct node *next;
};
 
display(struct node *head)
{
    if(head == NULL)
    {
        printf("NULL\n");
    }
    else
    {
        printf("%d\n", head -> data);
        display(head->next);
    }
}
 
struct node* front(struct node *head,int value)
{
    struct node *p;
    p=malloc(sizeof(struct node));
    p->data=value;
    p->next=head;
    return (p);
}
 
end(struct node *head,int value)
{
    struct node *p,*q;
    p=malloc(sizeof(struct node));
    p->data=value;
    p->next=NULL;
    q=head;
    while(q->next!=NULL)
    {
        q = q->next;
    }
    q->next = p;
}
 
after(struct node *a, int value)
{
    if (a->next != NULL)
    {
        struct node *p;
        p = malloc(sizeof(struct node));
        p->data = value;
        /*
        if initial linked list is
         _______        _______        _______ 
        |   1   |____\ |   3   |____\ |   5   |____\ NULL
        |_______|    / |_______|    / |_______|    / 
        and new node's value is 10
        then the next line will do something like
         _______        _______        _______ 
        |   1   |____\ |   3   |____\ |   5   |____\ NULL
        |_______|    / |_______|    / |_______|    / 
                        / \
                         |
                         |
                      ___|___
                     |   10  |
                     |_______|
        */
        p->next = a->next;
        a->next = p;
    }
    else
    {
        printf("Use end function to insert at the end\n");
    }
}
 
int main()
{
    struct node *prev,*head, *p;
    int n,i;
    printf ("number of elements:");
    scanf("%d",&n);
    head=NULL;
    for(i=0;i<n;i++)
    {
        p=malloc(sizeof(struct node));
        scanf("%d",&p->data);
        p->next=NULL;
        if(head==NULL)
            head=p;
        else
            prev->next=p;
        prev=p;
    }
    head = front(head,10);
    end(head,20);
    after(head->next->next,30);
    display(head);
    return 0;
}
 

About the Author: virag

Hello!!!... दोस्तों, आप सभी का इस ब्लॉग पर स्वागत है मेरा नाम विराग सम्बरिया है, और मैं पेशे से एक Computer Teacher हूँ मैं सन २०१० से यह कार्य कर रहा हूँ, और मुझे इस कार्य को करने में अत्यंत संतुष्टि प्राप्त होती है, एक तो इसके माध्यम से मैं अपने ज्ञान और अनुभव का लाभ अन्य लोगों तक पहुंचा पाता हूँ और दूसरा इसके माध्यम से मैं खुद भी अपने ज्ञान में वृद्धि करता हूँ. Thanks a Lot..... आपके इस Blog को Visit करने पर सहृदय धन्यवाद् !!!!!!

You May Also Like

Leave a Reply

Your email address will not be published. Required fields are marked *