如何用C语言中的单链表数据结构实现两个多项式的逐项相加操作?
时间: 2024-11-03 22:16:09 浏览: 28
在C语言中,我们可以使用单链表数据结构来表示多项式,每个节点包含一个系数(coeff)和一个指数(exponent)。对于两个多项式的逐项相加,我们需要遍历这两个链表,比较对应指数的系数,然后把较大的系数乘以其对应的指数添加到结果链表上,如果系数相同但指数不同,则需要创建一个新的节点并将它们合并。
以下是一个简单的示例,展示了如何实现这个过程:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int coefficient; // 系数
int exponent; // 指数
struct Node* next; // 指向下一个节点的指针
} PolynomialNode;
// 创建新节点
PolynomialNode* createNode(int coeff, int exp) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = coeff;
newNode->exponent = exp;
newNode->next = NULL;
return newNode;
}
// 添加节点到链表
void addNode(PolynomialNode** head, int coeff, int exp) {
PolynomialNode* newNode = createNode(coeff, exp);
if (*head == NULL) {
*head = newNode;
} else {
PolynomialNode* current = *head;
while (current->next != NULL && current->exponent < exp) {
current = current->next;
}
if (current->exponent == exp) {
if (newNode->coefficient > current->coefficient) {
PolynomialNode* temp = current->next;
current->next = newNode;
newNode->next = temp;
}
} else {
newNode->next = current->next;
current->next = newNode;
}
}
}
// 打印多项式
void printPolynomial(PolynomialNode* head) {
PolynomialNode* temp = head;
while (temp != NULL) {
printf("%d*x^%d ", temp->coefficient, temp->exponent);
temp = temp->next;
}
printf("\n");
}
// 主函数,演示相加操作
int main() {
PolynomialNode* poly1_head = NULL;
PolynomialNode* poly2_head = NULL;
// 假设我们已经有了两个多项式,例如:(2x^2 + 3x + 1) 和 (5x^2 - x + 7)
// 为它们添加节点
// ...
// 相加
addNode(&poly1_head, 5, 2); // 5x^2 for (5x^2 + 3x + 1)
addNode(&poly2_head, - x + 7)
// 打印结果多项式
printPolynomial(poly1_head);
return 0;
}
```
在这个例子中,你需要根据具体的多项式手动为`poly1_head`和`poly2_head`添加节点。完成后,调用`addNode`函数将它们相加,然后打印结果。
阅读全文