一元多项式加减乘用链表
时间: 2024-01-04 15:19:01 浏览: 36
以下是使用链表实现一元多项式的加减乘的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式的节点结构
typedef struct Node {
int coef; // 系数
int exp; // 指数
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建一个新的节点
Node* createNode(int coef, int exp) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->coef = coef;
newNode->exp = exp;
newNode->next = NULL;
return newNode;
}
// 在多项式的末尾添加一个节点
void appendNode(Node** poly, int coef, int exp) {
Node* newNode = createNode(coef, exp);
if (*poly == NULL) {
*poly = newNode;
} else {
Node* curr = *poly;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = newNode;
}
}
// 打印多项式
void printPoly(Node* poly) {
Node* curr = poly;
while (curr != NULL) {
printf("%dx^%d ", curr->coef, curr->exp);
if (curr->next != NULL) {
printf("+ ");
}
curr = curr->next;
}
printf("\n");
}
// 多项式相加
Node* addPoly(Node* poly1, Node* poly2) {
Node* result = NULL;
Node* curr1 = poly1;
Node* curr2 = poly2;
while (curr1 != NULL && curr2 != NULL) {
if (curr1->exp > curr2->exp) {
appendNode(&result, curr1->coef, curr1->exp);
curr1 = curr1->next;
} else if (curr1->exp < curr2->exp) {
appendNode(&result, curr2->coef, curr2->exp);
curr2 = curr2->next;
} else {
int coefSum = curr1->coef + curr2->coef;
if (coefSum != 0) {
appendNode(&result, coefSum, curr1->exp);
}
curr1 = curr1->next;
curr2 = curr2->next;
}
}
while (curr1 != NULL) {
appendNode(&result, curr1->coef, curr1->exp);
curr1 = curr1->next;
}
while (curr2 != NULL) {
appendNode(&result, curr2->coef, curr2->exp);
curr2 = curr2->next;
}
return result;
}
// 多项式相减
Node* subtractPoly(Node* poly1, Node* poly2) {
Node* result = NULL;
Node* curr1 = poly1;
Node* curr2 = poly2;
while (curr1 != NULL && curr2 != NULL) {
if (curr1->exp > curr2->exp) {
appendNode(&result, curr1->coef, curr1->exp);
curr1 = curr1->next;
} else if (curr1->exp < curr2->exp) {
appendNode(&result, -curr2->coef, curr2->exp);
curr2 = curr2->next;
} else {
int coefDiff = curr1->coef - curr2->coef;
if (coefDiff != 0) {
appendNode(&result, coefDiff, curr1->exp);
}
curr1 = curr1->next;
curr2 = curr2->next;
}
}
while (curr1 != NULL) {
appendNode(&result, curr1->coef, curr1->exp);
curr1 = curr1->next;
}
while (curr2 != NULL) {
appendNode(&result, -curr2->coef, curr2->exp);
curr2 = curr2->next;
}
return result;
}
// 多项式相乘
Node* multiplyPoly(Node* poly1, Node* poly2) {
Node* result = NULL;
Node* curr1 = poly1;
while (curr1 != NULL) {
Node* curr2 = poly2;
while (curr2 != NULL) {
int coefProd = curr1->coef * curr2->coef;
int expSum = curr1->exp + curr2->exp;
appendNode(&result, coefProd, expSum);
curr2 = curr2->next;
}
curr1 = curr1->next;
}
return result;
}
int main() {
// 创建多项式1: 2x^3 + 3x^2 + 4x^1 + 5x^0
Node* poly1 = NULL;
appendNode(&poly1, 2, 3);
appendNode(&poly1, 3, 2);
appendNode(&poly1, 4, 1);
appendNode(&poly1, 5, 0);
// 创建多项式2: 1x^2 + 2x^1 + 3x^0
Node* poly2 = NULL;
appendNode(&poly2, 1, 2);
appendNode(&poly2, 2, 1);
appendNode(&poly2, 3, 0);
// 打印多项式1和多项式2
printf("多项式1: ");
printPoly(poly1);
printf("多项式2: ");
printPoly(poly2);
// 多项式相加
Node* sum = addPoly(poly1, poly2);
printf("多项式相加: ");
printPoly(sum);
// 多项式相减
Node* diff = subtractPoly(poly1, poly2);
printf("多项式相减: ");
printPoly(diff);
// 多项式相乘
Node* prod = multiplyPoly(poly1, poly2);
printf("多项式相乘: ");
printPoly(prod);
return 0;
}
```