使用链表构建一元稀疏多项式,并完成一元多项式的加法。c代码
时间: 2024-10-06 11:00:52 浏览: 40
在计算机科学中,可以使用链表数据结构来表示稀疏多项式,因为一元多项式通常有许多零系数,存储为链表可以节省空间。每个节点代表多项式的一个项,包含系数和指数。下面是一个简单的C语言示例,展示了如何使用链表构建一元多项式并进行加法操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Term {
int coefficient; // 系数
int exponent; // 指数
struct Term* next; // 链接到下一个项
} Term;
// 创建一个新的项
Term* create_term(int coef, int exp) {
Term* term = (Term*)malloc(sizeof(Term));
term->coefficient = coef;
term->exponent = exp;
term->next = NULL;
return term;
}
// 合并两个项,如果指数相等则将系数相加
void add_terms(Term** head, Term* tail) {
if (*tail == NULL || (*tail)->exponent != tail->next->exponent)
*tail = tail->next;
else {
(*tail)->coefficient += tail->next->coefficient;
free(tail->next);
}
}
// 添加两个多项式
Term* add_poly(Term* poly1_head, Term* poly2_head) {
Term* result_head = NULL, *current1 = poly1_head, *current2 = poly2_head;
while (current1 && current2) {
if (current1->exponent > current2->exponent) {
add_terms(&result_head, current1);
current1 = current1->next;
} else if (current1->exponent < current2->exponent) {
add_terms(&result_head, current2);
current2 = current2->next;
} else { // 如果指数相等,相加系数
add_terms(&result_head, current1);
current1 = current1->next;
}
}
// 将剩余未处理的部分添加到结果
while (current1) {
add_terms(&result_head, current1);
current1 = current1->next;
}
while (current2) {
add_terms(&result_head, current2);
current2 = current2->next;
}
return result_head;
}
int main() {
Term* poly1 = create_term(2, 0); // 2x^0
poly1->next = create_term(3, 1); // 3x^1
poly1->next->next = create_term(0, 2); // 0x^2 (实际应用中可能有其他项)
Term* poly2 = create_term(-1, 1); // -1x^1
poly2->next = create_term(5, 0); // 5x^0
Term* sum = add_poly(poly1, poly2);
// 打印结果多项式(仅显示非零项)
printf("Result: ");
while (sum) {
if (sum->coefficient != 0)
printf("%d*x^%d ", sum->coefficient, sum->exponent);
sum = sum->next;
}
printf("\n");
return 0;
}
```
在这个例子中,我们首先创建了两个多项式(poly1和poly2),然后通过`add_poly`函数合并它们。最后,我们在main函数中打印出结果。
阅读全文