Home / C Programming / C program to add two polynomials using Linked Lists

C program to add two polynomials using Linked Lists

C program to add two polynomials using Linked Lists : Adding two polynomials is quite easy stuff when we do it manually :P but it requires a bit effort while programming it. I have written a simple three step Algorithm to add polynomials:

1. Seperate the like terms aside say polynomial is 2xy^2 +x^2 +x. Now we have three seperate terms: xy^2, x^2 and x.

2. Add the coefficients of like terms.

3. Append the seperate terms to form an polynomial.

The same concept is implemented below with the Help of Linked List. Let us see how to write a of adding two poynomials using .

 C program to add two polynomials using Linked Lists :

#include <stdio.h>
#include <conio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct pnode
   {
	float coef;
	int exp;
	struct pnode *next;
   }p;
p *getnode();
//Main function starts here
void main()
   {
	p *p1,*p2,*p3; 
	p *getpoly(),*add(p*,p*); 
	void display(p*);
	clrscr();
	printf(“\n Enter first polynomial”);
	p1=getpoly();
	printf(“\n Enter second polynomial”);
	p2=getpoly();
	printf(“\nThe first polynomial is”);
	display(p1);
	printf(“\nThe second polynomial is”);
	display(p2);
	p3=add(p1,p2);
	printf(“\nAddition of two polynomial is :\n”);
	display(p3); 
   }

/*Funtion to get polynomial*/
p *getpoly()
  {
	p *temp,*New,*last;
	int flag,exp;
	char ans;
	float coef;
	temp=NULL;
	flag=1;
	printf(“\nenter the polynomial in descending order of exponent”);
	do
	  {
		printf(“\nenter the coef & exponent of a term”);
		scanf(“%f%d”,&coef,&exp);
		New=getnode();
		if(New==NULL)
		printf(“\nmemory cannot be allocated”);
		New->coef=coef;
		New->exp=exp;
		if(flag==1)
		  {
			temp=New;
			last=temp;
			flag=0;
		   }
		else
		  {
			last->next=New;
			last=New;
		   }
		printf(“\ndou want to more terms”);
		ans=getch();
	    }
      while(ans==’y');
      return(temp);
   }
/*Function to get the Nodes of Polynomial*/
p *getnode()
  {
	p *temp;
	temp=(p*) malloc (sizeof(p));
	temp->next=NULL;
	return(temp);
  }
/*Function to display Polynomial*/
void display(p*head)
  {
	p*temp;
	temp=head;
	if(temp==NULL)
	printf(“\npolynomial empty”);
	while(temp->next!=NULL)
	  {
		printf(“%0.1fx^%d+”,temp->coef,temp->exp);
		temp=temp->next;
	   }
	printf(“\n%0.1fx^%d”,temp->coef,temp->exp);
	getch();
   }
/*Function to add Polynomials*/
p*add(p*first,p*second)
  {
	p *p1,*p2,*temp,*dummy;
	char ch;
	float coef;
	p *append(int,float,p*);
	p1=first;
	p2=second;
	temp=(p*)malloc(sizeof(p));
	if(temp==NULL)
	printf(“\nmemory cannot be allocated”);
	dummy=temp;
	while(p1!=NULL&&p2!=NULL)
	  {
		if(p1->exp==p2->exp)
    		  {
			coef=p1->coef+p2->coef;
			temp=append(p1->exp,coef,temp);
			p1=p1->next;
			p2=p2->next;
	           }
		else
		if(p1->expexp)
		  {
			coef=p2->coef;
			temp=append(p2->exp,coef,temp);
			p2=p2->next;
		   }
		else
		if(p1->exp>p2->exp)
		  {
			coef=p1->coef;
			temp=append(p1->exp,coef,temp);
			p1=p1->next;
		   }
	   }
	while(p1!=NULL)
	  {
		temp=append(p1->exp,p1->coef,temp);
		p1=p1->next;
		}
	while(p2!=NULL)
	  {
		temp=append(p2->exp,p2->coef,temp);
		p2=p2->next;
		}
	temp->next=NULL;
	temp=dummy->next;
	free(dummy);
	return(temp);
   }
/*Function to append the coefficients with Polynomial*/
p*append(int Exp,float Coef,p*temp)
  {
	p*New,*dum;
	New=(p*)malloc(sizeof(p));
	if(New==NULL)
	printf(“\ncannot be allocated”);
	New->exp=Exp;
	New->coef=Coef;
	New->next=NULL;
	dum=temp;
	dum->next=New;
	dum=New;
	return(dum);
  }

 We hope you all have enjoyed the . If you have any doubts or queries ask me in form of comments.

About Mr Coder

Well, I am software programmer and love to code. My hobbies is to do Hacking, Coding, Blogging, Web Designing and playing online games. Feel free to contact me at shiviskingg@gmail.com or lokesh@hackingloops.com

Check Also

C Program to Implement Stack

This C Program implements stack. Stack is an area of memory that holds all local …

One comment

  1. Nicely programmed and so explained. Thanks

Leave a Reply

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