写一个c语言代码用链表实现一元多项式的合并
时间: 2024-11-09 22:23:25 浏览: 16
要使用C语言实现链表来合并两个一元多项式,你可以定义一个结构体来表示单个项(系数和变量次数),然后创建链表节点。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
double coefficient; // 系数
int exponent; // 次数
struct Node* next; // 指向下一个节点的指针
} Term;
// 创建新节点
Term* createNode(double coefficient, int exponent) {
Term* newNode = (Term*)malloc(sizeof(Term));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
// 合并两个多项式
Term* mergePolynomials(Term* poly1, Term* poly2) {
if (poly1 == NULL) {
return poly2;
}
if (poly2 == NULL) {
return poly1;
}
if (poly1->exponent < poly2->exponent) {
poly1->next = mergePolynomials(poly1->next, poly2);
return poly1;
} else if (poly1->exponent > poly2->exponent) {
poly2->next = mergePolynomials(poly1, poly2->next);
return poly2;
} else { // 如果指数相同,比较系数
if (poly1->coefficient <= poly2->coefficient) {
poly1->next = mergePolynomials(poly1->next, poly2);
return poly1;
} else {
poly2->next = mergePolynomials(poly1, poly2->next);
return poly2;
}
}
}
// 打印多项式
void printPolynomial(Term* head) {
while (head != NULL) {
printf("%.2f*x^%d + ", head->coefficient, head->exponent);
head = head->next;
}
printf("0\n");
}
int main() {
// 示例多项式,根据实际情况替换
Term* poly1 = createNode(2.0, 1); // 2x
poly1->next = createNode(3.0, 2); // 3x^2
Term* poly2 = createNode(1.5, 1); // 1.5x
// 合并多项式
Term* mergedPoly = mergePolynomials(poly1, poly2);
// 打印结果
printf("Merged polynomial: ");
printPolynomial(mergedPoly);
free(mergedPoly);
return 0;
}
```
在这个代码中,我们首先创建了`Term`结构体表示多项式的每一项,然后实现了合并两个多项式链表的方法`mergePolynomials`。`printPolynomial`用于打印合并后的多项式。
运行这段代码,将会输出合并后的多项式。如果有多于两个多项式需要合并,只需改变`main`函数中的多项式链表即可。请注意,这个实现假设多项式都是非负幂次的,并且如果有相同的幂次,会优先选择系数较大的项。
阅读全文