c语言实现,用链表结构存储多项式,求两个多项式A+B的和
时间: 2023-10-11 11:06:43 浏览: 157
采用链式结构实现任意多项式的存储,求两个多项式的和
5星 · 资源好评率100%
好的,我可以帮你解决这个问题。以下是使用链表结构存储多项式并计算两个多项式A+B的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式项结构体
typedef struct PolyNode {
int coef; // 系数
int expon; // 指数
struct PolyNode* next; // 下一项
} PolyNode, *Polynomial;
// 创建一个新的多项式项
Polynomial createPolyNode(int coef, int expon) {
Polynomial node = (Polynomial)malloc(sizeof(PolyNode));
node->coef = coef;
node->expon = expon;
node->next = NULL;
return node;
}
// 将新的多项式项插入到多项式中
void insertPolyNode(Polynomial* p, Polynomial node) {
if (*p == NULL) { // 如果多项式为空,则直接将新的多项式项作为第一项
*p = node;
} else if ((*p)->expon < node->expon) { // 如果新的多项式项的指数比当前多项式项的指数更大,则将新的多项式项作为第一项
node->next = *p;
*p = node;
} else if ((*p)->expon == node->expon) { // 如果新的多项式项的指数与当前多项式项的指数相等,则将它们的系数相加并更新当前多项式项的系数
(*p)->coef += node->coef;
free(node); // 释放新的多项式项所占用的内存空间
} else { // 如果新的多项式项的指数比当前多项式项的指数更小,则将新的多项式项插入到当前多项式项的后面
insertPolyNode(&((*p)->next), node);
}
}
// 读取多项式的每一项,并将它们插入到多项式中
Polynomial readPoly() {
Polynomial poly = NULL;
int n, coef, expon;
scanf("%d", &n); // 读取多项式项的个数
while (n--) {
scanf("%d %d", &coef, &expon); // 读取多项式项的系数和指数
insertPolyNode(&poly, createPolyNode(coef, expon)); // 将新的多项式项插入到多项式中
}
return poly;
}
// 输出多项式的每一项
void printPoly(Polynomial poly) {
if (poly == NULL) { // 如果多项式为空,则输出 0
printf("0\n");
return;
}
while (poly != NULL) {
printf("%d %d", poly->coef, poly->expon);
if (poly->next != NULL) { // 如果当前多项式项不是最后一项,则输出一个空格
printf(" ");
}
poly = poly->next;
}
printf("\n");
}
// 计算两个多项式的和
Polynomial addPoly(Polynomial a, Polynomial b) {
Polynomial c = NULL;
while (a != NULL && b != NULL) {
if (a->expon > b->expon) { // 如果多项式 a 的当前项的指数更大,则将多项式 a 的当前项插入到多项式 c 中
insertPolyNode(&c, createPolyNode(a->coef, a->expon));
a = a->next;
} else if (a->expon < b->expon) { // 如果多项式 b 的当前项的指数更大,则将多项式 b 的当前项插入到多项式 c 中
insertPolyNode(&c, createPolyNode(b->coef, b->expon));
b = b->next;
} else { // 如果多项式 a 和多项式 b 的当前项的指数相等,则将它们的系数相加并插入到多项式 c 中
insertPolyNode(&c, createPolyNode(a->coef + b->coef, a->expon));
a = a->next;
b = b->next;
}
}
while (a != NULL) { // 将多项式 a 的剩余部分插入到多项式 c 中
insertPolyNode(&c, createPolyNode(a->coef, a->expon));
a = a->next;
}
while (b != NULL) { // 将多项式 b 的剩余部分插入到多项式 c 中
insertPolyNode(&c, createPolyNode(b->coef, b->expon));
b = b->next;
}
return c;
}
int main() {
Polynomial a = readPoly(); // 读取多项式 A
Polynomial b = readPoly(); // 读取多项式 B
Polynomial c = addPoly(a, b); // 计算多项式 A+B 的和
printPoly(c); // 输出多项式 A+B 的和
return 0;
}
```
希望这个代码可以帮助到你!如果你有任何问题,请随时问我。
阅读全文