Add Two Polynomial Using Doubly Linked List In C Program

Ram Pothuraju
#include <stdio.h>
#include<conio.h>
typedef struct pnode

{
 float coef;
 int exp;
 struct pnode *next;
}p;

p *getnode();

void main()
{
 p *p1,*p2,*p3;
 p *getpoly(),*add(p*,p*);
 void display(p*);
 clrscr();
 printf("\n enter first polynomial.");
 printf("\n-------------------------");
 p1=getpoly();
 printf("\n-------------------------");
 printf("\n enter second polynomial");
 p2=getpoly();
 printf("\n-------------------------");
 printf("\nthe first polynomial is: ");
 display(p1);
 printf("\n-------------------------");
 printf("\nthe second polynomial is :");
 display(p2);
 printf("\n-------------------------");
 p3=add(p1,p2);
 printf("\naddition of two polynomial is :\n\n");
 display(p3);
 printf("\n-------------------------");
}
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 coefficient & 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("\n do you want to more terms?(y/n):");
  scanf("%s",&ans);
  }
 while(ans=='y');

 return(temp);
}

p *getnode()
{
 p *temp;
 temp=(p*) malloc (sizeof(p));
 temp->next=NULL;
 return(temp);
}

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("%0.1fx^%d",temp->coef,temp->exp);
getch();
}

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->exp<p2->exp)
   {
    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);
}
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);
}
</p2-></conio.h></stdio.h>


OUTPUT


enter first polynomial.
-------------------------
enter the polynomial in descending order of exponent.
enter the coefficient & exponent of a term:12 4

do you want to more terms?(y/n):y

enter the coefficient & exponent of a term:10 2

do you want to more terms?(y/n):y

enter the coefficient & exponent of a term:5 1

do you want to more terms?(y/n):n

-------------------------
 enter second polynomial
enter the polynomial in descending order of exponent.
enter the coefficient & exponent of a term: 15 3

do you want to more terms?(y/n):y

enter the coefficient & exponent of a term:10 2

do you want to more terms?(y/n):15 1

-------------------------
the first polynomial is: 12.0X^4  +  10.0X^2  +  5.0x^1
-------------------------
the second polynomial is :15.0X^3  +  10.0x^2
-------------------------
addition of two polynomial is :

12.0X^4  +  15.0X^3  +  20.0X^2  +  5.0x^1
-------------------------

Post a Comment

0Comments

Post a Comment (0)