POLYNOMIAL ADDITION & SUBTRACTIO IN C .

#include<stdio.h>
#include<stdlib.h>
struct NODE{
       int co;
       int ex;
       struct NODE *pnext;
       };
struct NODE *poly1=NULL,*poly2=NULL,*poly=NULL,*polys=NULL;
void create(struct NODE *node)
{
 int ch,i;
 printf("Enter the highest exponent :\n");
 scanf("%d",&ch);
 for(i=ch;i>=0;i--)
 {
  printf("\nEnter the coefficient & exponent :");
  scanf("%d%d",&node->co,&node->ex);
  node->pnext=(struct NODE*)malloc(sizeof(struct NODE));
  node=node->pnext;
  node->pnext=NULL;  
}
return ;
}
void polysub(struct NODE *poly1,struct NODE *poly2,struct NODE *polys)
{
     while(poly1->pnext &&  poly2->pnext)
     {
      if(poly1->ex>poly2->ex)
      {
       polys->ex=poly1->ex;
       polys->co=poly1->co;
       poly1=poly1->pnext;
       }
      else if(poly1->ex<poly2->ex)
      {
       polys->ex=poly2->ex;
       polys->co=((poly2->co)*-1);
       poly2=poly2->pnext;
       }
      else
      {
       polys->ex=poly1->ex;
       polys->co=poly1->co-poly2->co;
       poly1=poly1->pnext;
       poly2=poly2->pnext;
       }
      polys->pnext=(struct NODE *)malloc(sizeof(struct NODE));
      polys=polys->pnext;
      polys->pnext=NULL;
     }
     while(poly1->pnext || poly2->pnext)
     {
      if(poly1->pnext)
      {
       polys->ex=poly1->ex;
       polys->co=poly1->co;
       poly1=poly1->pnext;
       }
      if(poly2->pnext)
      {
       polys->ex=poly2->ex;
       polys->co=((poly2->co)*-1);
       poly2=poly2->pnext;
       }
       polys->pnext=(struct NODE *)malloc(sizeof(struct NODE));
       polys=polys->pnext;
       polys->pnext=NULL;
       }
}
void show(struct NODE *node)
{
 struct NODE *pt=node;
if(pt==NULL)
printf("Expression not found \n");
else
{
while(node->pnext!=NULL)
 {
  printf("%dx^%d",node->co,node->ex);
  node=node->pnext;
  if(node->pnext!=NULL)
   printf("+");
}
return ;}
}
void polyadd(struct NODE *poly1,struct NODE *poly2,struct NODE *poly)
{
     while(poly1->pnext &&  poly2->pnext)
     {
      if(poly1->ex>poly2->ex)
      {
       poly->ex=poly1->ex;
       poly->co=poly1->co;
       poly1=poly1->pnext;
       }
      else if(poly1->ex<poly2->ex)
      {
       poly->ex=poly2->ex;
       poly->co=poly2->co;
       poly2=poly2->pnext;
       }
      else
      {
       poly->ex=poly1->ex;
       poly->co=poly1->co+poly2->co;
       poly1=poly1->pnext;
       poly2=poly2->pnext;
       }
      poly->pnext=(struct NODE *)malloc(sizeof(struct NODE));
      poly=poly->pnext;
      poly->pnext=NULL;
     }
     while(poly1->pnext || poly2->pnext)
     {
      if(poly1->pnext)
      {
       poly->ex=poly1->ex;
       poly->co=poly1->co;
       poly1=poly1->pnext;
       }
      if(poly2->pnext)
      {
       poly->ex=poly2->ex;
       poly->co=poly2->co;
       poly2=poly2->pnext;
       }
       poly->pnext=(struct NODE *)malloc(sizeof(struct NODE));
       poly=poly->pnext;
       poly->pnext=NULL;
       }
}
int main()
{
      poly1=(struct NODE *)malloc(sizeof(struct NODE));
      poly2=(struct NODE *)malloc(sizeof(struct NODE));
      poly=(struct NODE *)malloc(sizeof(struct NODE));//FOR ADD
      polys=(struct NODE *)malloc(sizeof(struct NODE));//FOR SUBSTRCT
      if((poly1==NULL)||(poly2==NULL)||(polys==NULL)||(poly==NULL))
      {
      printf("No memory \n");
      return 0;    
 }
      printf("\nEnter first expression:");
      create(poly1);
      printf("\nEnter second expression:");
      create(poly2);
      printf("\n1st Expression:");
      show(poly1);
      printf("\n2nd Expression:");
      show(poly2);
      
 polyadd(poly1,poly2,poly);
      printf("\nAdded polynomial:");
      show(poly);
      polysub(poly1,poly2,polys);
      printf("\nSubstracted polynomial:");
      show(polys);
      return 0;
}

Comments