কম্পিউটার

C++ এ লিঙ্কড লিস্ট ব্যবহার করে দুটি বহুপদ যোগ করা হচ্ছে।


এই ধারণাটি আরও ভালভাবে বোঝার জন্য আসুন প্রথমে প্রয়োজনীয় সমস্ত মৌলিক বিষয়বস্তু ব্রাশ করি।

লিঙ্ক করা তালিকা একটি ডাটা স্ট্রাকচার যা প্রতিটি উপাদানকে তালিকার একটি নোডে অবজেক্ট হিসেবে সংরক্ষণ করে। প্রতিটি নোটে দুটি অংশ ডেটা হ্যান এবং পরবর্তী নোডের লিঙ্ক রয়েছে।

বহুপদ একটি গাণিতিক অভিব্যক্তি যা ভেরিয়েবল এবং সহগ নিয়ে গঠিত। উদাহরণস্বরূপ x^2 - 4x + 7

বহুপদ যুক্ত তালিকায় , বহুপদীর সহগ এবং সূচকগুলিকে তালিকার ডেটা নোড হিসাবে সংজ্ঞায়িত করা হয়৷

দুটি বহুপদ যুক্ত করার জন্য যা একটি লিঙ্কযুক্ত তালিকা হিসাবে সংরক্ষণ করা হয়। আমাদের একই শক্তি দিয়ে ভেরিয়েবলের সহগ যোগ করতে হবে। একটি লিঙ্ক করা তালিকার নোডে 3 জন সদস্য থাকে, পরের নোডের সাথে সহগ মান লিঙ্ক৷

একটি লিঙ্কযুক্ত তালিকা যা বহুপদ সংরক্ষণ করতে ব্যবহৃত হয় −

এর মত দেখায়

বহুপদ :4x 7 + 12x 2 + ৪৫

C++ এ লিঙ্কড লিস্ট ব্যবহার করে দুটি বহুপদ যোগ করা হচ্ছে।

বহুপদী প্রতিনিধিত্বকারী একটি লিঙ্কযুক্ত তালিকা এইরকম দেখায়৷

দুটি বহুপদ যুক্ত করা যা একটি লিঙ্কযুক্ত তালিকা দ্বারা উপস্থাপিত হয়। আমরা নোডের সূচক মানের মান পরীক্ষা করি। সূচকের একই মানের জন্য, আমরা সহগ যোগ করব।

উদাহরণ,

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. C++ এ পুনরাবৃত্তি ব্যবহার করে লিঙ্ক করা তালিকার বিকল্প নোড প্রিন্ট করুন

  2. C++ এ দ্বিগুণ লিঙ্কযুক্ত তালিকা ব্যবহার করে অগ্রাধিকার সারি

  3. লিংকড লিস্ট ব্যবহার করে গ্রাফ রিপ্রেজেন্ট করার জন্য C++ প্রোগ্রাম

  4. পাইথন ব্যবহার করে লিঙ্কযুক্ত তালিকা হিসাবে দেওয়া দুটি বহুপদ যোগ করার প্রোগ্রাম