C++ Program to Multiply two polynomials using linked list

C++ Program to Multiply two polynomials using linked list.

/**************************************************************	
	Author: Arun Vishnu M V
	Web: www.arunmvishnu.com
	Description: C++ Program to Multiply two polynomials using linked list.
***************************************************************/
#include<conio.h>   	
#include<iostream.h> 
#include<process.h>  

//   Creating a NODE Structure
struct node
{
   int coe,exp;        // data
   struct node *next;  // link to next node and previous node
};

// Creating a class Polynomial
class polynomial
{
   struct node *start,*ptrn,*ptrp;
   public:
     void get_poly(); // to get a polynomial
     void show();     // show
     void multiply(polynomial p1,polynomial p2); // Multiply polynomials
     void sort();  // Sort Polynomials
};

void polynomial::get_poly()      //  Get Polynomial
{
   char c='y';
   ptrn=ptrp=start=NULL;
   while(c=='y' || c=='Y')
   {
      ptrn=new node;
      if(ptrp!=NULL)
      ptrp->next=ptrn;
      if(start==NULL)
      start=ptrn;
      ptrp=ptrn;
      cout<<"\nEnter the coefficient: ";
      cin>>ptrn->coe;
      cout<<"Enter the exponent: ";
      cin>>ptrn->exp;
      ptrn->next=NULL;
      cout<<"Enter y to add more nodes: ";
      cin>>c;
   }
   return;
}


void polynomial::show()  // Show Polynomial
{
   struct node *ptr;
   ptr=start;
   while(ptr!=NULL)
   {
      cout<coe<<"X^"<exp<<" + ";
      ptr=ptr->next;
   }
   cout<<"\b\b ";
}
// Multiplying
void polynomial::multiply(polynomial p1,polynomial p2)
{
   struct node *p1ptr,*p2ptr,*ptri,*ptrj;
   int exp,coe;
   ptrn=ptrp=start=NULL;
   p1ptr=p1.start;
   p2ptr=p2.start;
   while(p1ptr!=NULL)   // Start multiplying
   {
      p2ptr=p2.start;
      while(p2ptr!=NULL)
      {
	 ptrn=new node;
	 ptrn->next=NULL;
	 if(start==NULL)
	 start=ptrn;
	 if(ptrp!=NULL)
	 ptrp->next=ptrn;
	 ptrn->coe=p1ptr->coe*p2ptr->coe;
	 ptrn->exp=p1ptr->exp+p2ptr->exp;
	 ptrp=ptrn;
	 p2ptr=p2ptr->next;
      }
      p1ptr=p1ptr->next;
   }                    // end of multiplication
   ptri=ptrj=start;     // Normalising
   ptrn=ptrp=start=NULL;
   while(ptri!=NULL)
   {
      exp=ptri->exp;
      coe=ptri->coe;
      ptrj=ptri->next;
      while(ptrj!=NULL)
      {
	 if(ptrj->exp==ptri->exp)
	 {
	    coe=coe+ptrj->coe;
	    ptrj->coe=0;//ptrj_p->next=ptrj->next;
	 }
	 ptrj=ptrj->next;
      }
      if(coe!=0)
      {
	 ptrn=new node;
	 ptrn->next=NULL;
	 if(start==NULL)
	 start=ptrn;
	 if(ptrp!=NULL)
	 ptrp->next=ptrn;
	 ptrn->coe=coe;
	 ptrn->exp=exp;
	 ptrp=ptrn;
      }
      ptri=ptri->next;
   }
   return;
}

void polynomial::sort()  // Sort Polynomials
{
   struct node *ptri,*ptrj;
   int coe,exp;
   ptri=ptrj=start;
   while(ptri->next!=NULL)
   {
      ptrj=ptri->next;
      while(ptrj!=NULL)
      {
	 if(ptri->expexp)
	 {
	    coe=ptri->coe;
	    exp=ptri->exp;
	    ptri->coe=ptrj->coe;
	    ptri->exp=ptrj->exp;
	    ptrj->coe=coe;
	    ptrj->exp=exp;
	 }
	 ptrj=ptrj->next;
      }
      ptri=ptri->next;
   }
   return;
}


int main()
{
   clrscr();
   polynomial p1,p2,product;
   cout<<"First Polynomial.\n";
   p1.get_poly();
   cout<<"\nSecond polynomial.\n";
   p2.get_poly();
   clrscr();
   cout<<"\nThe First polynomial is: ";
   p1.show();
   cout<<"\nThe second polynomial is: ";
   p2.show();
   cout<<"\n\nThe product of two polynomials is: \n";
   product.multiply(p1,p2);
   product.sort();
   product.show();
   getch();
   return 0;
}

//---------------------- END--------------------

You may also like...

7 Responses

  1. akira says:

    thanks 4 listing program …

  2. Mahesh Kumar says:

    Hi everyone,

    Can anyone send me the complete program of adding and multiplying two polynomials program using circular linked list in a very sample manner, it’s urgent…

    Thanks in advance….

  3. bhaskar dutta says:

    Thnx..i was using same logic but i don’t know why it was not executing…simply mistake may be there in my prgm….but its ok…

  4. thanks for programming help.

  5. sir
    show some logic of dequeue.and b+ tree

  6. khushbu says:

    Thnks for help.

  7. Yumit says:

    Thank you for sharing this. I found it to be very useful and educational. Thank you!

Leave a Reply

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