利用单链表C语言实现两个多项式相加算法。 创建两个一元多项式; 输出一元多项式; 实现两个一元多项式相加; 输出相加后的一元多项式。
时间: 2024-10-29 09:12:41 浏览: 13
数据结构(C语言)用单链表存储一元多项式并实现两个多项式的相加运算.doc
5星 · 资源好评率100%
在C语言中,我们可以使用结构体来表示多项式的系数和项数,然后通过指针链接每个节点来构建单链表。以下是使用单链表实现两个一元多项式相加的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式节点结构
typedef struct Node {
double coef; // 系数
int exp; // 指数
struct Node* next; // 指向下一个节点的指针
} PolynomialNode;
// 创建新的多项式节点
PolynomialNode* createNode(double coef, int exp) {
PolynomialNode* newNode = (PolynomialNode*)malloc(sizeof(PolynomialNode));
newNode->coef = coef;
newNode->exp = exp;
newNode->next = NULL;
return newNode;
}
// 添加新项到链表
void appendTerm(PolynomialNode** head, double coef, int exp) {
PolynomialNode* newNode = createNode(coef, exp);
if (*head == NULL) {
*head = newNode;
} else {
PolynomialNode* current = *head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
// 输出多项式
void printPolynomial(PolynomialNode* head) {
PolynomialNode* temp = head;
printf("Polynomial: ");
while (temp != NULL) {
printf("%f*x^%d + ", temp->coef, temp->exp);
temp = temp->next;
}
printf("0\n");
}
// 相加两个多项式
void addPolynomials(PolynomialNode** poly1, PolynomialNode** poly2, PolynomialNode** resultHead) {
PolynomialNode* current1 = *poly1;
PolynomialNode* current2 = *poly2;
PolynomialNode* resultHeadTemp = *resultHead;
while (current1 != NULL || current2 != NULL) {
double sumCoef = current1 ? current1->coef : 0;
if (current2) {
sumCoef += current2->coef;
}
PolynomialNode* newNode = createNode(sumCoef, current1 ? current1->exp : current2->exp);
newNode->next = *resultHeadTemp;
*resultHeadTemp = newNode;
if (current1) {
current1 = current1->next;
}
if (current2) {
current2 = current2->next;
}
}
}
int main() {
PolynomialNode* poly1_head = NULL;
PolynomialNode* poly2_head = NULL;
// 分别添加两个多项式的项
appendTerm(&poly1_head, 2.0, 1); // 2x^1
appendTerm(&poly1_head, -1.5, 0); // -1.5x^0
appendTerm(&poly2_head, 4.0, 2); // 4x^2
PolynomialNode* resultHead = NULL;
addPolynomials(&poly1_head, &poly2_head, &resultHead);
printPolynomial(resultHead);
return 0;
}
```
在这个例子中,我们首先定义了`PolynomialNode`结构表示一个多项式项,包括系数、指数和指向下一个项的指针。`createNode`函数用于创建新的节点,`appendTerm`函数将项添加到链表,`printPolynomial`函数用于打印多项式,而`addPolynomials`函数则是两个多项式的相加操作。
运行这个程序会输出相加后的多项式。注意,这里假设输入的多项式都是在一元形式下,如果有其他限制,如最高次幂等,需要在主函数中处理。此外,如果你需要从用户输入获取多项式的项,你需要修改`main`函数中添加项的部分。
阅读全文