Answer:
try this
Explanation:
#include<stdio.h>
#include<malloc.h>
typedef struct poly{ double coff;
int pow;
struct poly *link; }SL;
void create(SL **head)
{
*head=NULL;
}
//Insertion
void ins_beg(SL ** head, double c, int pw)
{
SL *ptr;
ptr=(SL *)malloc(sizeof(SL));
ptr->coff=c;
ptr->pow=pw;
ptr->link=*head;
*head=ptr;
}
void trav(SL **head)
{
SL *ptr;
ptr=*head;
printf("\n\t Cofficient Exponent\n");
while(ptr!=NULL)
{ printf("\t\t%3.2f \t%d\n",ptr->coff, ptr->pow);
ptr=ptr->link;
}
}
//addition of polynomial............
void mult(SL *pl1, SL *pl2, SL **res)
{
SL trav1, trav2, ptr, new1,*loc;
int x,y;
trav1=*pl1;
while(trav1!=NULL)
{
trav2=*pl2;
while(trav2!=NULL)
{
x=(trav1->coff)*(trav2->coff);
y=(trav1->pow)+(trav2->pow);
//printf("\t%d\t%d\n",x,y);
if(*res==NULL)
{
new1=(SL *)malloc(sizeof(SL));
new1->coff=x;
new1->pow=y;
new1->link=NULL;
*res=new1;
}
else
{
ptr=*res;
while((y<ptr->pow)&&(ptr->link!=NULL))
{
loc=ptr;
ptr=ptr->link;
}
if(y==ptr->pow)
ptr->coff=ptr->coff+x;
else
{
if(ptr->link!=NULL)
{
new1=(SL *)malloc(sizeof(SL));
new1->coff=x;
new1->pow=y;
loc->link=new1;
new1->link=ptr;
}
else
{
new1=(SL *)malloc(sizeof(SL));
new1->coff=x;
new1->pow=y;
ptr->link=new1;
new1->link=NULL;
}
}
}
trav2=trav2->link;
}
trav1=trav1->link;
}
}
//...addition..............
void add(SL *pl1, SL *pl2)
{
SL trav1, ptr, *new1,*loc; trav1=*pl1;
while(trav1!=NULL)
{
loc=ptr=*pl2;
while((trav1->pow<ptr->pow)&&(ptr->link!=NULL))
{
loc=ptr; ptr=ptr->link;
}
if(loc==ptr)
{
new1=(SL *)malloc(sizeof(SL));
new1->coff=trav1->coff;
new1->pow=trav1->pow;
new1->link=*pl2;
*pl2=new1;
}
else
if(trav1->pow==ptr->pow)
{
ptr->coff=ptr->coff+trav1->coff;
//ptr->pow=ptr->pow+trav1->pow;
}
else
if(ptr->link!=NULL)
{
new1=(SL *)malloc(sizeof(SL));
new1->coff=trav1->coff;
new1->pow=trav1->pow;
new1->link=ptr;
loc->link=new1;
}
else
{
new1=(SL *)malloc(sizeof(SL));
new1->coff=trav1->coff;
new1->pow=trav1->pow;
new1->link=NULL;
ptr->link=new1;
}
trav1=trav1->link;
}
}
int main()
{
SL first, sec, *res;
create(&first);
ins_beg(&first,10.25,0);
ins_beg(&first,4,1);
ins_beg(&first,5,2);
ins_beg(&first,4,4);
printf("\nFirst Polinomial:\n");
trav(&first);
create(&sec);
ins_beg(&sec,11,0);
ins_beg(&sec,6,1);
ins_beg(&sec,4,2);
ins_beg(&sec,3,3);
printf("\nSecond Polinomial:\n");
trav(&sec);
create(&res);
printf("\nMultiplication of two Polinomial:\n");
mult(&first,&sec,&res);
trav(&res);
printf("\nAddition of two Polinomial:\n");
add(&first,&sec);
trav(&sec);
//trav(&first);
return 0;
}