C语言实现一元多项式加法运算
#include <stdio.h> #include <stdlib.h>
typedef struct PolyNode *Polynomial; struct PolyNode { int coef; // 系数 int expon; // 指数 Polynomial link; // 指向下一个节点的指针 };
// 创建新节点 Polynomial NewNode() { Polynomial P = (Polynomial)malloc(sizeof(struct PolyNode)); P->coef = 0; P->expon = 0; P->link = NULL; return P; }
// 读取多项式 Polynomial ReadPoly() { int N, c, e; Polynomial P, Rear, T;
P = NewNode(); // 创建头节点
Rear = P;
scanf("%d", &N);
while (N--) {
scanf("%d %d", &c, &e);
T = NewNode();
T->coef = c;
T->expon = e;
Rear->link = T;
Rear = T;
}
T = P;
P = P->link;
free(T); // 删除头节点
return P;
}
// 输出多项式 void PrintPoly(Polynomial P) { int flag = 0;
if (!P) {
printf("0 0\n");
return;
}
while (P) {
if (!flag) {
flag = 1;
} else {
printf(" ");
}
printf("%d %d", P->coef, P->expon);
P = P->link;
}
printf("\n");
}
// 多项式相加 Polynomial AddPoly(Polynomial P1, Polynomial P2) { Polynomial Front, Rear, T; int sum;
Front = NewNode(); // 创建头节点
Rear = Front;
while (P1 && P2) {
if (P1->expon == P2->expon) {
sum = P1->coef + P2->coef;
if (sum != 0) {
T = NewNode();
T->coef = sum;
T->expon = P1->expon;
Rear->link = T;
Rear = T;
}
P1 = P1->link;
P2 = P2->link;
} else if (P1->expon > P2->expon) {
T = NewNode();
T->coef = P1->coef;
T->expon = P1->expon;
Rear->link = T;
Rear = T;
P1 = P1->link;
} else {
T = NewNode();
T->coef = P2->coef;
T->expon = P2->expon;
Rear->link = T;
Rear = T;
P2 = P2->link;
}
}
while (P1) {
T = NewNode();
T->coef = P1->coef;
T->expon = P1->expon;
Rear->link = T;
Rear = T;
P1 = P1->link;
}
while (P2) {
T = NewNode();
T->coef = P2->coef;
T->expon = P2->expon;
Rear->link = T;
Rear = T;
P2 = P2->link;
}
T = Front;
Front = Front->link;
free(T); // 删除头节点
return Front;
}
int main() { Polynomial P1, P2, PS, PD; P1 = ReadPoly(); P2 = ReadPoly(); PS = AddPoly(P1, P2); PD = AddPoly(P1, P2); PrintPoly(PS); PrintPoly(PD); return 0;
原文地址: https://www.cveoy.top/t/topic/lRHg 著作权归作者所有。请勿转载和采集!