c语言实现一元多项式链表相加
时间: 2024-10-05 11:02:13 浏览: 23
在C语言中,可以使用结构体和链表数据结构来实现一元多项式的链表表示,并通过遍历节点来相加两个多项式。首先,我们需要定义一个`PolynomialNode`结构体,包含系数和下一项节点指针:
```c
typedef struct PolynomialNode {
double coefficient; // 系数
struct PolynomialNode* next; // 下一项节点指针
} PolynomialNode;
```
然后,我们可以创建函数来添加两个多项式的节点,如果系数不为0,则将它们合并到结果链表中:
```c
void addPolynomialNodes(PolynomialNode** result, PolynomialNode* node1, PolynomialNode* node2) {
PolynomialNode* temp = *result;
while (node1 && node2) {
double sum = node1->coefficient + node2->coefficient;
if (sum != 0) {
PolynomialNode* newNode = (sum > 0) ? malloc(sizeof(PolynomialNode)) : NULL;
newNode->coefficient = sum;
newNode->next = temp;
if (temp)
temp->next = newNode;
else
*result = newNode;
temp = newNode;
}
if (node1->coefficient == 0)
node1 = node1->next;
else
node1 = NULL;
if (node2->coefficient == 0)
node2 = node2->next;
else
node2 = NULL;
}
// 如果其中一个链表未结束,将其剩余部分添加到结果链表
while (node1)
addCoefficientToResult(result, node1);
while (node2)
addCoefficientToResult(result, node2);
free(temp); // 释放临时链表中的节点
}
// 辅助函数:添加单个系数到结果链表
void addCoefficientToResult(PolynomialNode** result, PolynomialNode* node) {
PolynomialNode* newNode = (node->coefficient > 0) ? malloc(sizeof(PolynomialNode)) : NULL;
newNode->coefficient = node->coefficient;
newNode->next = *result;
*result = newNode;
}
```
最后,为了相加两个多项式,只需要创建一个空的头结点,然后分别处理每个输入多项式:
```c
void addPolynomials(PolynomialNode** result, PolynomialNode* poly1, PolynomialNode* poly2) {
*result = NULL;
// 分别添加两个多项式的项
addPolynomialNodes(result, poly1, poly2);
}
```