C语言实现一元多项式加法运算
#include <stdio.h> #include <stdlib.h>
typedef struct node { int coefficient; // 系数 int exponent; // 指数 struct node *next; // 指向下一个节点的指针 } Node, *Polynomial;
Polynomial create_poly(int n) { // 创建n个节点的多项式 Polynomial p, r, head = NULL; // p指向当前节点,r指向前一个节点,head指向头节点
head = (Polynomial)malloc(sizeof(Node)); // 创建头节点
head->next = NULL;
r = head;
for (int i = 0; i < n; i++) { // 循环创建n个节点
p = (Polynomial)malloc(sizeof(Node));
scanf("%d%d", &(p->coefficient), &(p->exponent));
p->next = NULL;
r->next = p; // 将当前节点连接到前一个节点后面
r = p; // 将前一个节点指针移动到当前节点
}
return head; // 返回头节点指针
}
void print_poly(Polynomial p) { // 打印多项式 while (p->next != NULL) { p = p->next; printf("%d %d ", p->coefficient, p->exponent); } printf("\n"); }
Polynomial add_poly(Polynomial p1, Polynomial p2) { // 多项式加法 Polynomial p, r, head = NULL; // p指向当前节点,r指向前一个节点,head指向头节点
head = (Polynomial)malloc(sizeof(Node)); // 创建头节点
head->next = NULL;
r = head;
while (p1->next != NULL && p2->next != NULL) { // 当两个多项式都有节点时
p = (Polynomial)malloc(sizeof(Node));
p->next = NULL;
if (p1->next->exponent > p2->next->exponent) { // 当p1的指数大于p2的指数时
p->coefficient = p1->next->coefficient;
p->exponent = p1->next->exponent;
p1 = p1->next;
} else if (p1->next->exponent < p2->next->exponent) { // 当p1的指数小于p2的指数时
p->coefficient = p2->next->coefficient;
p->exponent = p2->next->exponent;
p2 = p2->next;
} else { // 当p1的指数等于p2的指数时
p->coefficient = p1->next->coefficient + p2->next->coefficient;
p->exponent = p1->next->exponent;
p1 = p1->next;
p2 = p2->next;
}
r->next = p; // 将当前节点连接到前一个节点后面
r = p; // 将前一个节点指针移动到当前节点
}
while (p1->next != NULL) { // 当p1还有节点时
p = (Polynomial)malloc(sizeof(Node));
p->coefficient = p1->next->coefficient;
p->exponent = p1->next->exponent;
p->next = NULL;
r->next = p; // 将当前节点连接到前一个节点后面
r = p; // 将前一个节点指针移动到当前节点
p1 = p1->next;
}
while (p2->next != NULL) { // 当p2还有节点时
p = (Polynomial)malloc(sizeof(Node));
p->coefficient = p2->next->coefficient;
p->exponent = p2->next->exponent;
p->next = NULL;
r->next = p; // 将当前节点连接到前一个节点后面
r = p; // 将前一个节点指针移动到当前节点
p2 = p2->next;
}
return head; // 返回头节点指针
}
int main() { int n1, n2; Polynomial p1, p2, p3;
scanf("%d", &n1); // 输入第一个多项式的节点个数
p1 = create_poly(n1); // 创建第一个多项式
scanf("%d", &n2); // 输入第二个多项式的节点个数
p2 = create_poly(n2); // 创建第二个多项式
p3 = add_poly(p1, p2); // 计算两个多项式的和
print_poly(p3); // 打印结果多项式
return 0;
}
原文地址: https://www.cveoy.top/t/topic/lRHt 著作权归作者所有。请勿转载和采集!