struct PolyNode
{
int coef;
int expon;
struct PolyNode* link;
};
typedef struct PolyNode* Polynomial;
Polynomial P1, P2,PS;
int Compare(int e1, int e2)
{
if (e1 > e2)
return 1;
else if (e2 < e2)
return -1;
else if (e2 == e1)
return 0;
}
void Attach(int c, int e, Polynomial *PRear)
{
Polynomial P;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->coef = c;
P->expon = e;
P->link = NULL;
(*PRear)->link = P;
(*PRear) = P;
}
Polynomial ReadPoly()
{
Polynomial P,Rear,t;
int c, e, N;
printf("请输入有多少项:\n");
scanf("%d", &N);
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->link = NULL;
Rear = P;
printf("请输入每一项的系数,和指数用空格隔开:\n");
while (N--)
{
scanf("%d %d", &c, &e);
Attach(c, e, &Rear);
}
t = P; P = P->link; free(t);
return P;
}
Polynomial Add(Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (P1&&P2)
{
switch (Compare(P1->expon, P2->expon))
{
case1:
{
Attach(P1->coef, P1->expon, &rear);
P1 = P1->link;
break;
}
case -1:
{
Attach(P2->coef, P2->expon, &rear);
P2 = P2->link;
break;
}
case 0:
{
sum = P1->coef + P2->coef;
if (sum)Attach(sum, P1->expon, &rear);
P1 = P1->link;
P2 = P2->link;
break;
}
}
}
for (; P1;P1=P1->link)
Attach(P1->coef,P1->expon,&rear);
for (; P2;P2=P2->link)
Attach(P2->coef,P2->expon,&rear);
rear->link = NULL;
temp = front;
front = front->link;
free(temp);
return front;
}
void PrintPoly(Polynomial P)
{
int flag = 0;
if (!P){ printf("0\n"); return; };
while (P)
{
if (flag == 0)
flag = 1;
else
printf(" ");
printf("%d %d", P->coef, P->expon);
P = P->link;
}
}
int main()
{
P1 = ReadPoly();
P2 = ReadPoly();
PS = Add(P1, P2);
PrintPoly(PS);
return 0;
}
一元多项式的相加
猜你喜欢
转载自blog.csdn.net/qq_41750725/article/details/79947419
今日推荐
周排行