写一个c语言代码一元多项式的合并用链表实现
时间: 2024-11-09 20:23:46 浏览: 32
C语言:一元多项式加减法运算(链表 附答案).docx
在C语言中,我们可以使用链表数据结构来表示一元多项式。每个节点包含系数和次方信息,然后我们可以定义两个链表,分别代表两个多项式,通过遍历和比较节点的次方进行合并。以下是一个简单的链表实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
double coefficient; // 系数
int exponent; // 次方
struct Node* next; // 指针到下一个节点
} PolynomialNode;
// 初始化一个新节点
PolynomialNode* createNode(double c, int e) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coefficient = c;
newNode->exponent = e;
newNode->next = NULL;
return newNode;
}
// 合并两个多项式(假设第一个链表更长)
void mergePolynomials(PolynomialNode** headA, PolynomialNode** headB, PolynomialNode** result) {
PolynomialNode* currentA = *headA;
PolynomialNode* currentB = *headB;
PolynomialNode* newHead = *result; // 新链表头部
while (currentA != NULL) {
if (currentB == NULL || currentA->exponent < currentB->exponent) {
// 如果当前A的次方小于或等于B,添加A的项
*newHead = createNode(currentA->coefficient, currentA->exponent);
newHead->next = *result;
*result = newHead;
currentA = currentA->next;
} else {
// B的次方大于A,直接将B的项添加
*newHead = currentB;
newHead->next = *result;
*result = newHead;
currentB = currentB->next;
}
}
// 将剩余的B链表(如果有的话)添加到结果
while (currentB != NULL) {
*newHead = currentB;
newHead->next = *result;
*result = newHead;
currentB = currentB->next;
}
}
// 打印多项式
void printPolynomial(PolynomialNode* node) {
while (node != NULL) {
printf("%.2f*x^%d + ", node->coefficient, node->exponent);
node = node->next;
}
printf("0\n");
}
int main() {
PolynomialNode* polyA = createNode(2.0, 2); // 2x^2
polyA->next = createNode(1.0, 1); // 1x^1
polyA->next->next = createNode(-3.0, 0); // -3x^0
PolynomialNode* polyB = createNode(5.0, 3); // 5x^3
polyB->next = createNode(4.0, 1); // 4x^1
PolynomialNode* resultHead = NULL; // 结果链表开始
mergePolynomials(&polyA, &polyB, &resultHead);
printf("Merged polynomial: ");
printPolynomial(resultHead);
return 0;
}
```
这段代码首先定义了一个链表节点结构`PolynomialNode`,然后创建了两个多项式链表`polyA`和`polyB`,接下来调用`mergePolynomials`函数合并它们,最后打印合并后的多项式。
阅读全文