数据结构之多项式相加C语言代码
时间: 2024-10-11 16:02:53 浏览: 29
在C语言中,计算两个多项式的相加并不直接像数学那样直观,因为计算机中的数据通常是以数值形式存储的,而不是作为字符串。我们通常需要先将多项式转换成数组或链表,然后逐项相加。下面是一个简单的例子,假设多项式是用整数表示的系数和对应变量次数的数组:
```c
#include <stdio.h>
// 定义多项式节点结构体
typedef struct {
int coefficient; // 系数
int degree; // 次数
} PolynomialTerm;
// 函数用于合并两个多项式,并返回结果多项式的首节点
PolynomialTerm* addPolynomials(PolynomialTerm *poly1, PolynomialTerm *poly2, int maxDegree) {
PolynomialTerm *result = (maxDegree == 0) ? NULL : (PolynomialTerm*)malloc(sizeof(PolynomialTerm)); // 如果只有一个多项式,直接复制
PolynomialTerm *temp = result;
for (int i = 0; i <= maxDegree; ++i) {
temp->coefficient += poly1[i].coefficient + poly2[i].coefficient; // 累加系数
if (temp->degree >= i)
temp->degree = i; // 更新最高次幂
if (!result || temp->coefficient > 0) { // 只有当结果不存在或当前项非零时才添加新项
temp = (PolynomialTerm*)realloc(temp, sizeof(PolynomialTerm) * (temp->degree + 1));
temp->degree = i;
}
}
return result;
}
// 示例
int main() {
PolynomialTerm a[] = {1, 2, 3};
PolynomialTerm b[] = {4, 5, 6};
int n1 = sizeof(a) / sizeof(a[0]);
int n2 = sizeof(b) / sizeof(b[0]);
PolynomialTerm *sum = addPolynomials(a, b, MAX(n1, n2));
// 打印结果多项式
for (PolynomialTerm *term = sum; term != NULL; term = term->next) {
printf("%d*x^%d + ", term->coefficient, term->degree);
}
printf("0\n");
free(sum); // 不要忘记释放内存
return 0;
}
```
在这个示例中,`addPolynomials`函数会合并两个多项式到一个新的数组中,如果某个次数超过了最大度,那么只会保留这个最大的次数。请注意,这只是一个简化版本,实际应用中可能还需要处理更复杂的情况,比如合并两个长度不同的多项式。
阅读全文