Polynomial Addition and Multiplication using Linked List


/*
Write a program for polynomial addition and multiplication using linked list.
*/


#include<stdio.h>
#include<stdlib.h>

struct node
{


float coef;
int expo;
struct node *link;
 

};

struct node *create(struct node *);
struct node *insert_s(struct node *,float,int);
struct node *insert(struct node *,float,int);
void display(struct node *ptr);
void poly_add(struct node *,struct node *);
void poly_mult(struct node *,struct node *);

main( )
{
 

 struct node *start1=NULL,*start2=NULL;
 

 printf("Enter polynomial 1 :\n");
 start1=create(start1);
 

 printf("Enter polynomial 2 :\n");
 start2=create(start2);
 

 printf("Polynomial 1 is : ");
 display(start1);
 

 printf("Polynomial 2 is : ");
 display(start2);
 

 poly_add(start1, start2);
 

 poly_mult(start1, start2);
 

}

//structure - create

struct node *create(struct node *start)
{
 

 int i,n,ex;
 float co;
 

 printf("Enter the number of terms : ");
 scanf("%d",&n);
 

 for(i=1;i<=n;i++)
 {
 

 printf("Enter coeficient for term %d : ",i);
 scanf("%f",&co);
 

 printf("Enter exponent for term %d : ",i);
 scanf("%d",&ex);
 start=insert_s(start,co,ex);
 

}
 

 return start;
 

}

//structure - insert
struct node *insert_s(struct node *start,float co,int ex)
{
 

 struct node *ptr,*tmp;
 

 tmp=(struct node *)malloc(sizeof(struct node));
 tmp->coef=co;
 tmp->expo=ex;
 

 //list empty or exp greater than first one
 if(start==NULL || ex > start->expo)
 {
 

 tmp->link=start;
 start=tmp;
 

 }
 else

 {
 

 ptr=start;
 

 while(ptr->link!=NULL && ptr->link->expo >= ex)
 ptr=ptr->link;
 tmp->link=ptr->link;
 ptr->link=tmp;
 

}
 

 return start;
 

}

//structure - insert

struct node *insert(struct node *start,float co,int ex)
{
 struct node *ptr,*tmp;
 

 tmp=(struct node *)malloc(sizeof(struct node));
 tmp->coef=co;
 tmp->expo=ex;
 

 //If list is empty
 if(start==NULL)
 {
 

 tmp->link=start;
 start=tmp;
 

 }
 else /*Insert at the end of the list*/
 {
 

 ptr=start;
 

 while(ptr->link!=NULL)
 ptr=ptr->link;
 tmp->link=ptr->link;
 ptr->link=tmp;
 }

 return start;
}

//display

void display(struct node *ptr)
{
 

 if(ptr==NULL)
 {
 

 printf("Zero polynomial\n");
 return;
 

 }
 

 while(ptr!=NULL)
 {
 

 printf("(%.1fx^%d)", ptr->coef,ptr->expo);
 ptr=ptr->link;
 

 if(ptr!=NULL)
 printf(" + ");
 

 else
 printf("\n");
 }
 

}





 

void poly_add(struct node *p1,struct node *p2)
{
 

 struct node *start3;
 start3=NULL;
 

 while(p1!=NULL && p2!=NULL)
 {
 

 if(p1->expo > p2->expo)
 {
 start3=insert(start3,p1->coef,p1->expo);
 p1=p1->link;
 }
 

 else if(p2->expo > p1->expo)
 {
 start3=insert(start3,p2->coef,p2->expo);
 p2=p2->link;
 }
 

 else if(p1->expo==p2->expo)
 {
 start3=insert(start3,p1->coef+p2->coef,p1->expo);
 p1=p1->link;
 p2=p2->link;
 }
 }
 

 /*if poly2 has finished and elements left in poly1*/
 while(p1!=NULL)
 {
 start3=insert(start3,p1->coef,p1->expo);
 p1=p1->link;
 }
 

 /*if poly1 has finished and elements left in poly2*/
 while(p2!=NULL)
 {
 start3=insert(start3,p2->coef,p2->expo);
 p2=p2->link;
 }
 

 printf("Added polynomial is : ");
 display(start3);
}

void poly_mult(struct node *p1, struct node *p2)
{
 struct node *start3;
 struct node *p2_beg = p2;
 start3=NULL;
 

 if(p1==NULL || p2==NULL)
 {
 printf("Multiplied polynomial is zero polynomial\n");
 return;
 }
 

 while(p1!=NULL)
 {
 p2=p2_beg;
 

 while(p2!=NULL)
 {
 start3=insert_s(start3,p1->coef*p2->coef,p1->expo+p2->expo);
 p2=p2->link;
 }
 

 p1=p1->link;
 

 }
 

 printf("Multiplied polynomial is : ");
 display(start3);
}



Related Posts,
  1. What is Polynomial?  
  2. Polynomial Addition using Linked List
  3. Polynomial Subtraction using Linked List 
  4. Polynomial Multiplication using Linked List 

Please follow our blog as well as Share with your friends.


One of the best blog on the WWW for C Programmers. This blog contains more than 1,000+  C Programs written by programmers and verified by experts. 

If you want to share your programming skill with us then write email on sdk852018@gmail.com for Guest Post, We will publish your post after verified by our expert team.
 
Thanks in Advance !!! Enjoy Programming ...!!!

Post a Comment

10 Comments

  1. This comment has been removed by the author.

    ReplyDelete
  2. I guess after each multiplication, the term is simply being inserted to the list headed by start3. What about the terms which would have same exponents? They won't be added together to give a single term. There won't be terms with unique exponents in the final multiplied polynomial.
    I am guessing my comment will be removed.

    ReplyDelete
  3. In multiplication the simplified term will contain 2 or more coefficient with same power of x but will not get added

    ReplyDelete
  4. Why don't you free the linked lists?

    ReplyDelete
  5. struct node *create(struct node *);
    could u please explain this declaration

    ReplyDelete
  6. Please follow blog and share with your friends

    ReplyDelete