Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी ++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना।

इस अवधारणा को बेहतर ढंग से समझने के लिए आइए सबसे पहले आवश्यक सभी बुनियादी सामग्री को ब्रश करें।

लिंक की गई सूची एक डेटा संरचना है जो सूची के नोड में प्रत्येक तत्व को एक वस्तु के रूप में संग्रहीत करती है। प्रत्येक नोट में दो भाग डेटा होते हैं और अगले नोड से लिंक होते हैं।

बहुपद एक गणितीय व्यंजक है जिसमें चर और गुणांक होते हैं। उदाहरण के लिए x^2 - 4x + 7

बहुपद लिंक्ड सूची . में , बहुपद के गुणांक और घातांक सूची के डेटा नोड के रूप में परिभाषित होते हैं।

एक लिंक्ड सूची के रूप में संग्रहीत दो बहुपदों को जोड़ने के लिए। हमें समान घात वाले चरों के गुणांकों को जोड़ना होगा। लिंक की गई सूची में नोड में 3 सदस्य होते हैं, अगले नोड के लिए गुणांक मान लिंक।

एक लिंक की गई सूची जिसका उपयोग बहुपद को संग्रहीत करने के लिए किया जाता है, ऐसा दिखता है -

बहुपद :4x 7 + 12x 2 + 45

सी ++ में लिंक्ड लिस्ट का उपयोग करके दो बहुपदों को जोड़ना।

इस तरह एक लिंक की गई सूची बहुपद का प्रतिनिधित्व करती है।

एक लिंक्ड सूची द्वारा दर्शाए गए दो बहुपदों को जोड़ना। हम नोड के घातांक मान पर मानों की जाँच करते हैं। घातांक के समान मानों के लिए, हम गुणांक जोड़ेंगे।

उदाहरण,

Input :
p1= 13x8 + 7x5 + 32x2 + 54
p2= 3x12 + 17x5 + 3x3 + 98

Output : 3x12 + 13x8 + 24x5 + 3x3 + 32x2 + 152

स्पष्टीकरण - सभी घातों के लिए, हम घातांकों के गुणांकों की जांच करेंगे जिनके घातांक का मान समान है और उन्हें जोड़ देंगे। अंतिम बहुपद लौटाएं।

एल्गोरिदम

इनपुट - बहुपद p1 और p2 को एक लिंक्ड सूची के रूप में दर्शाया गया है।

Step 1: loop around all values of linked list and follow step 2& 3.
Step 2: if the value of a node’s exponent. is greater copy this node to result node and head towards the next node.
Step 3: if the values of both node’s exponent is same add the coefficients and then copy the added value with node to the result.
Step 4: Print the resultant node.

उदाहरण

#include<bits/stdc++.h>
using namespace std;
struct Node{
   int coeff;
   int pow;
   struct Node *next;
};
void create_node(int x, int y, struct Node **temp){
   struct Node *r, *z;
   z = *temp;
   if(z == NULL){
      r =(struct Node*)malloc(sizeof(struct Node));
      r->coeff = x;
      r->pow = y;
      *temp = r;
      r->next = (struct Node*)malloc(sizeof(struct Node));
      r = r->next;
      r->next = NULL;
   } else {
      r->coeff = x;
      r->pow = y;
      r->next = (struct Node*)malloc(sizeof(struct Node));
      r = r->next;
      r->next = NULL;
   }
}
void polyadd(struct Node *p1, struct Node *p2, struct Node *result){
   while(p1->next && p2->next){
      if(p1->pow > p2->pow){
         result->pow = p1->pow;
         result->coeff = p1->coeff;
         p1 = p1->next;
      }
      else if(p1->pow < p2->pow){
         result->pow = p2->pow;
         result->coeff = p2->coeff;
         p2 = p2->next;
      } else {
         result->pow = p1->pow;
         result->coeff = p1->coeff+p2->coeff;
         p1 = p1->next;
         p2 = p2->next;
      }
      result->next = (struct Node *)malloc(sizeof(struct Node));
      result = result->next;
      result->next = NULL;
   }
   while(p1->next || p2->next){
      if(p1->next){
         result->pow = p1->pow;
         result->coeff = p1->coeff;
         p1 = p1->next;
      }
      if(p2->next){
         result->pow = p2->pow;
         result->coeff = p2->coeff;
         p2 = p2->next;
      }
      result->next = (struct Node *)malloc(sizeof(struct Node));
      result = result->next;
      result->next = NULL;
   }
}
void printpoly(struct Node *node){
   while(node->next != NULL){
      printf("%dx^%d", node->coeff, node->pow);
      node = node->next;
      if(node->next != NULL)
         printf(" + ");
   }
}
int main(){
   struct Node *p1 = NULL, *p2 = NULL, *result = NULL;
   create_node(41,7,&p1);
   create_node(12,5,&p1);
   create_node(65,0,&p1);
   create_node(21,5,&p2);
   create_node(15,2,&p2);
   printf("polynomial 1: ");
   printpoly(p1);
   printf("\npolynomial 2: ");
   printpoly(p2);
   result = (struct Node *)malloc(sizeof(struct Node));
   polyadd(p1, p2, result);
   printf("\npolynomial after adding p1 and p2 : ");
   printpoly(result);
   return 0;
}

आउटपुट

polynomial 1: 41x^7 + 12x^5 + 65x^0
polynomial 2: 21x^5 + 15x^2
polynomial after adding p1 and p2 : 41x^7 + 33x^5 + 15x^2 + 65x^0

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

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

  1. सी ++ प्रोग्राम लिंक्ड लिस्ट का उपयोग करके ग्राफ का प्रतिनिधित्व करने के लिए

    एक ग्राफ की घटना मैट्रिक्स स्मृति में संग्रहीत करने के लिए एक ग्राफ का एक और प्रतिनिधित्व है। यह मैट्रिक्स एक वर्ग मैट्रिक्स नहीं है। आपतन मैट्रिक्स का क्रम V x E है। जहाँ V शीर्षों की संख्या है और E ग्राफ़ में किनारों की संख्या है। इस मैट्रिक्स की प्रत्येक पंक्ति में हम कोने रख रहे हैं, और प्रत्ये

  1. पायथन का उपयोग करके लिंक्ड सूचियों के रूप में दिए गए दो बहुपदों को जोड़ने का कार्यक्रम

    मान लीजिए, हमें दो बहुपद दिए गए हैं और हमें दो बहुपदों का योग ज्ञात करना है। बहुपदों को लिंक्ड सूचियों के रूप में दर्शाया जाना चाहिए; बहुपद की शर्तों को एक लिंक्ड सूची नोड के रूप में दर्शाया जाएगा। प्रत्येक लिंक्ड लिस्ट नोड में अगले लिंक्ड लिस्ट नोड के लिए गुणांक मान, पावर वैल्यू और पॉइंटर होगा। हमे