c语言分别用链表和动态数组实现一元多项式的加法和乘法并给出代码
时间: 2024-10-09 15:06:14 浏览: 48
在C语言中,一元多项式通常表示为每个系数和其对应的指数的结构体。我们可以使用链表来存储多项式,因为链表可以动态地增加元素而不需要预先确定大小。下面我会分别演示如何使用链表和动态数组来实现一元多项式的加法和乘法。
**链表实现:**
```c
typedef struct Term {
double coefficient;
int exponent;
} Term;
typedef struct Polynomial {
Term* terms;
int count; // 存储项的数量
} Polynomial;
// 加法
Polynomial* add_polynomials(Polynomial* p1, Polynomial* p2) {
Polynomial result;
result.count = p1->count + p2->count;
result.terms = (Term*)malloc(result.count * sizeof(Term));
for (int i = 0, j = 0; i < p1->count || j < p2->count; ++i, ++j) {
if (i < p1->count && (j == 0 || p1->terms[i].exponent > p2->terms[j - 1].exponent)) {
result.terms[j] = p1->terms[i];
} else if (j < p2->count) {
result.terms[j] = p2->terms[j];
}
}
return &result;
}
// 乘法(这里简化版本,只考虑最低次幂相乘)
Polynomial* multiply_polynomials(Polynomial* p1, Polynomial* p2) {
Polynomial result;
result.count = p1->count + p2->count - 1; // 因为最高次幂会合并
result.terms = malloc(result.count * sizeof(Term));
for (int i = 0; i < p1->count; ++i) {
double coef1 = p1->terms[i].coefficient;
for (int j = 0; j < p2->count; ++j) {
result.terms[i + j].coefficient += coef1 * p2->terms[j].coefficient;
}
}
return &result;
}
阅读全文