一元多项式加法链表的实现c语言
时间: 2024-10-14 15:10:03 浏览: 2
一元多项式加法链表通常用于表示数学中的多项式,其中每个节点代表多项式的系数和次数。在 C 语言中实现这个数据结构,你需要创建一个包含系数和指数的结构体,以及两个指针指向当前节点和前驱节点。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式节点结构
typedef struct PolynomialNode {
int coefficient; // 系数
int exponent; // 指数
struct PolynomialNode* next; // 指向下一个节点的指针
} PolynomialNode;
// 初始化一个新节点
PolynomialNode* createNode(int coefficient, int exponent) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
// 合并两个多项式节点的加法操作
void addPolynomialNodes(PolynomialNode* node1, PolynomialNode* node2, PolynomialNode** result) {
if (!node1 || !node2) { // 如果其中一个为空,直接将另一个复制到结果
*result = node1 ? node1 : node2;
} else if (node1->exponent > node2->exponent) { // 按升序排列,将较小指数的添加到较大指数前面
(*result)->next = addPolynomialNodes(node1, node2, &(*result)->next);
} else {
(*result)->next = addPolynomialNodes(node2, node1, &(*result)->next);
}
(*result)->coefficient += node1->coefficient + node2->coefficient;
}
// 添加两个多项式
PolynomialNode* addPolynomials(PolynomialNode* poly1, PolynomialNode* poly2) {
PolynomialNode* current1 = poly1;
PolynomialNode* current2 = poly2;
PolynomialNode* head = NULL;
while (current1 && current2) {
PolynomialNode* newNode = createNode(current1->coefficient + current2->coefficient, current1->exponent);
addPolynomialNodes(newNode, current1->next, &newNode);
addPolynomialNodes(newNode, current2->next, &newNode);
current1 = current1->next;
current2 = current2->next;
if (current1) {
newNode->next = current1;
}
if (current2) {
newNode->next = current2;
}
}
// 将剩余的部分连接起来
if (current1) {
addPolynomialNodes(current1, NULL, &head);
} else if (current2) {
addPolynomialNodes(current2, NULL, &head);
}
return head;
}
int main() {
// 示例多项式节点的创建和加法
PolynomialNode* poly1 = createNode(1, 2); // 1x^2
PolynomialNode* poly2 = createNode(-2, 0); // -2x^0
PolynomialNode* sum = addPolynomials(poly1, poly2);
// 打印结果
PolynomialNode* temp = sum;
printf("Sum of polynomials:\n");
while (temp) {
printf("%d*x^%d ", temp->coefficient, temp->exponent);
temp = temp->next;
}
return 0;
}
```
在这个例子中,`addPolynomials` 函数实现了合并两个多项式的功能,通过递归地处理每个节点对,并按照指数排序来保证最终结果的正确性。