Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी प्रोग्राम डबल लिंक्ड सूची का उपयोग करके किसी भी स्थिति में एक नोड सम्मिलित करने के लिए

लिंक्ड सूचियां गतिशील स्मृति आवंटन का उपयोग करती हैं और नोड्स का संग्रह हैं।

नोड्स के दो भाग होते हैं जो डेटा और लिंक होते हैं।

लिंक की गई सूचियों के प्रकार

C प्रोग्रामिंग लैंग्वेज में लिंक्ड लिस्ट के प्रकार इस प्रकार हैं -

  • एकल/एकल लिंक की गई सूचियां।
  • डबल / डबल लिंक्ड सूचियां।
  • सर्कुलर सिंगल लिंक्ड लिस्ट।
  • सर्कुलर डबल लिंक्ड लिस्ट।

डबल लिंक्ड लिस्ट

नीचे दिया गया चित्र डबल लिंक्ड सूची का प्रतिनिधित्व दर्शाता है।

सी प्रोग्राम डबल लिंक्ड सूची का उपयोग करके किसी भी स्थिति में एक नोड सम्मिलित करने के लिए

उदाहरण

डबल लिंक्ड सूची का उपयोग करके किसी भी स्थिति में नोड सम्मिलित करने के लिए सी प्रोग्राम निम्नलिखित है -

#include <stdio.h>
#include <stdlib.h>
struct node {
   int num;
   struct node * preptr;
   struct node * nextptr;
}*stnode, *ennode;
void DlListcreation(int n);
void DlLinsertNodeAtBeginning(int num);
void DlLinsertNodeAtEnd(int num);
void DlLinsertNodeAtAny(int num, int pos);
void displayDlList(int a);
int main(){
   int n,num1,a,insPlc;
   stnode = NULL;
   ennode = NULL;
   printf("\n\n Doubly Linked List : Insert a node at any position :\n");
   printf("-----------------------------------------------------------------------------------\n");
   printf(" Input the number of nodes : ");
   scanf("%d", &n);
   DlListcreation(n);
   a=1;
   displayDlList(a);
   printf(" Input the position ( 1 to %d ) to insert a new node : ",n+1);
   scanf("%d", &insPlc);
   printf(" Input data for the position %d : ", insPlc);
   scanf("%d", &num1);
   DlLinsertNodeAtAny(num1,insPlc);
   a=2;
   displayDlList(a);
   return 0;
}
void DlListcreation(int n){
   int i, num;
   struct node *fnNode;
   if(n >= 1){
      stnode = (struct node *)malloc(sizeof(struct node));
      if(stnode != NULL){
         printf(" Input data for node 1 : "); // assigning data in the first node
         scanf("%d", &num);
         stnode->num = num;
         stnode->preptr = NULL;
         stnode->nextptr = NULL;
         ennode = stnode;
         for(i=2; i<=n; i++){
            fnNode = (struct node *)malloc(sizeof(struct node));
            if(fnNode != NULL){
               printf(" Input data for node %d : ", i);
               scanf("%d", &num);
               fnNode->num = num;
               fnNode->preptr = ennode;
               fnNode->nextptr = NULL;
               ennode->nextptr = fnNode;
               ennode = fnNode;
            }
            else{
               printf(" Memory can not be allocated.");
               break;
            }
         }
      }
      else{
         printf(" Memory can not be allocated.");
      }  
   }
}
void DlLinsertNodeAtAny(int num, int pos){
   int i;
   struct node * newnode, *tmp;
   if(ennode == NULL){
      printf(" No data found in the list!\n");
   }
   else{
      tmp = stnode;
      i=1;
      while(i<pos-1 && tmp!=NULL){
         tmp = tmp->nextptr;
         i++;
      }
      if(pos == 1){
         DlLinsertNodeAtBeginning(num);
      }
      else if(tmp == ennode){
         DlLinsertNodeAtEnd(num);
      }
      else if(tmp!=NULL){
         newnode = (struct node *)malloc(sizeof(struct node));
         newnode->num = num;
         newnode->nextptr = tmp->nextptr;
         newnode->preptr = tmp;
         if(tmp->nextptr != NULL){
            tmp->nextptr->preptr = newnode; // n+1th node is linking with new node
         }
         tmp->nextptr = newnode; // n-1th node is linking with new node
      }
      else{
         printf(" The position you entered, is invalid.\n");
      }
   }
}
void DlLinsertNodeAtBeginning(int num){
   struct node * newnode;
   if(stnode == NULL){
      printf(" No data found in the list!\n");
   }
   else{
      newnode = (struct node *)malloc(sizeof(struct node));
      newnode->num = num;
      newnode->nextptr = stnode;
      newnode->preptr = NULL;
      stnode->preptr = newnode;
      stnode = newnode;
   }
}
void DlLinsertNodeAtEnd(int num){
   struct node * newnode;
   if(ennode == NULL){
      printf(" No data found in the list!\n");
   }
   else{
      newnode = (struct node *)malloc(sizeof(struct node));
      newnode->num = num;
      newnode->nextptr = NULL;
      newnode->preptr = ennode;
      ennode->nextptr = newnode;
      ennode = newnode;
   }
}
void displayDlList(int m){
   struct node * tmp;
   int n = 1;
   if(stnode == NULL) {
      printf(" No data found in the List yet.");
   }
   else{
      tmp = stnode;
      if (m==1) {
         printf("\n Data entered in the list are :\n");
      }
      else{
         printf("\n After insertion the new list are :\n");
      }
      while(tmp != NULL){
         printf(" node %d : %d\n", n, tmp->num);
         n++;
         tmp = tmp->nextptr; // current pointer moves to the next node
      }
   }
}

आउटपुट

जब उपरोक्त प्रोग्राम को निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

Doubly Linked List : Insert node at any position:
-----------------------------------------------------------------------------------
Input the number of nodes : 5
Input data for node 1 : 23
Input data for node 2 : 12
Input data for node 3 : 11
Input data for node 4 : 34
Input data for node 5 : 10

Data entered in the list are :
node 1 : 23
node 2 : 12
node 3 : 11
node 4 : 34
node 5 : 10
Input the position ( 1 to 6 ) to insert a new node : 5
Input data for the position 5 : 78

After insertion the new list are :
node 1 : 23
node 2 : 12
node 3 : 11
node 4 : 34
node 5 : 78
node 6 : 10


  1. C भाषा का प्रयोग करते हुए लिंक्ड सूची में तत्वों को सम्मिलित करने की व्याख्या करें

    लिंक्ड सूचियाँ गतिशील मेमोरी आवंटन का उपयोग करती हैं अर्थात वे उसी के अनुसार बढ़ती और सिकुड़ती हैं। उन्हें नोड्स के संग्रह के रूप में परिभाषित किया गया है। यहां, नोड्स के दो भाग होते हैं, जो डेटा और लिंक हैं। डेटा, लिंक और लिंक्ड सूचियों का प्रतिनिधित्व नीचे दिया गया है - लिंक की गई सूचियों पर संच

  1. सी . में लिंक्ड सूची का उपयोग कर प्राथमिकता कतार

    हमें डेटा और प्राथमिकता एक पूर्णांक मान के रूप में दी जाती है और कार्य दी गई प्राथमिकता के अनुसार एक लिंक्ड सूची बनाना और परिणाम प्रदर्शित करना है। Queue एक FIFO डेटा संरचना है जिसमें जो तत्व पहले डाला जाता है वह सबसे पहले निकाला जाता है। प्राथमिकता कतार एक प्रकार की कतार है जिसमें प्राथमिकता के आध

  1. सी प्रोग्राम में लिंक्ड लिस्ट के अंत से n'th नोड के लिए प्रोग्राम

    n नोड्स के साथ दिए गए कार्य को लिंक की गई सूची के अंत से nth नोड को प्रिंट करना है। प्रोग्राम को किसी सूची में नोड्स के क्रम को नहीं बदलना चाहिए, इसके बजाय इसे केवल लिंक की गई सूची के अंतिम नोड से nth नोड को प्रिंट करना चाहिए। उदाहरण Input -: 10 20 30 40 50 60    N=3 Output -: 40 उपरोक्त