#include <stdio.h>
#include <stdlib.h>
typedef struct poly
{
double coef;//系数
int expn;//指数
struct poly * next;
}PolyNode,* PolyLinkList;
PolyLinkList Tail_Polylinklist(int e);
PolyLinkList AddPoly(PolyLinkList H1,PolyLinkList H2);
void Print_Polylinklist(PolyLinkList H);
void Destroy_Polylinklist(PolyLinkList H);
PolyLinkList Tail_Polylinklist(int e)
{
PolyLinkList H = (PolyLinkList)malloc(sizeof(PolyNode));
PolyLinkList T;
double coef = 0.0;
int expn = 0;
H->next = NULL;
T = H;
for (int i = 0; i < e; i++)
{
scanf("%lf",&coef);
scanf("%d",&expn);
PolyLinkList p = (PolyLinkList)malloc(sizeof(PolyNode));
p->coef = coef;
p->expn = expn;
p->next = T->next;
T->next = p;
T = T->next;
}
return H;
}
void Print_Polylinklist(PolyLinkList H)
{
PolyLinkList L;
L = H->next;
printf("\n");
printf("Y = ");
while (L != NULL)
{
if(L->coef > 0)
{
printf("%.2lfX^%d+",L->coef,L->expn);
}
else
{
printf("(%.2lf)X^%d+",L->coef,L->expn);
}
L = L->next;
}
printf("\n");
}
PolyLinkList AddPoly(PolyLinkList H1,PolyLinkList H2)
{
PolyLinkList L3 = H1,p,F1,F2,prev;
p = L3;int sum = 0;
prev = p;
p->coef = 0;
p->expn = 0;
F2 = H2;
H1 = H1->next;
H2 = H2->next;
free(F2);
while (H1 != NULL && H2 != NULL)
{
if (H1->expn < H2->expn)
{
p->next = H1;
p = p->next;
H1 = H1->next;
if (prev->expn == p->expn && prev != L3)
{
prev->coef = prev->coef + p->coef;
free(p);
p = prev;
}
else
{
prev = p;
}
}
else if (H1->expn > H2->expn)
{
p->next = H2;
p = p->next;
H2 = H2->next;
if (prev->expn == p->expn && prev != L3)
{
prev->coef = prev->coef + p->coef;
free(p);
p = prev;
}
else
{
prev = p;
}
}
else
{
sum = (H1->coef + H2->coef);
if (sum == 0)
{
F1 = H1;
F2 = H2;
H1 = H1->next;
H2 = H2->next;
free(F1);
free(F2);
}
else
{
H1->coef = sum;
F2 = H2;
p->next = H1;
p = p->next;
prev = p;
H1 = H1->next;
H2 = H2->next;
free(F2);
}
}
}
p->next = H1 ? H1 : H2;
return L3;
}
void Destroy_Polylinklist(PolyLinkList H)
{
PolyLinkList L;
L = H;
while (L)
{
L = L->next;
free(H);
H = L;
}
}
int main()
{
PolyLinkList L1,L2,L3;
L1 = Tail_Polylinklist(3);
// printf("L1:");
Print_Polylinklist(L1);
L2 = Tail_Polylinklist(4);
printf("L2:");
Print_Polylinklist(L2);
L3 = AddPoly(L1,L2);
// printf("L1 Add L2 equal:");
Print_Polylinklist(L3);
//这里不用摧毁L1 和 L2,否则因为L3是由L1,L2 cretae
Destroy_Polylinklist(L3);
system("pause");
return 0;
}
减法和乘法读者自行添加吧