单链表存储一元多项式,求两个多项式的加减乘法运算的完整代码
时间: 2023-06-25 10:02:33 浏览: 73
单链表存储一元多项式的结构体如下:
```c
typedef struct node {
float coef; // 系数
int expn; // 指数
struct node *next;
}Node, *Polynomial;
```
其中,`coef`表示多项式的系数,`expn`表示多项式的指数,`next`表示下一个节点的指针。
以下是求两个多项式的加减乘法运算的完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
float coef; // 系数
int expn; // 指数
struct node *next;
}Node, *Polynomial;
// 创建多项式
Polynomial createPolynomial() {
Polynomial head = (Polynomial)malloc(sizeof(Node));
head->next = NULL;
return head;
}
// 添加节点
void addNode(Polynomial polynomial, float coef, int expn) {
Polynomial p = polynomial;
while (p->next && p->next->expn > expn) {
p = p->next;
}
if (p->next && p->next->expn == expn) {
p->next->coef += coef;
if (p->next->coef == 0) {
Polynomial tmp = p->next;
p->next = tmp->next;
free(tmp);
}
} else {
Polynomial node = (Polynomial)malloc(sizeof(Node));
node->coef = coef;
node->expn = expn;
node->next = p->next;
p->next = node;
}
}
// 打印多项式
void printPolynomial(Polynomial polynomial) {
Polynomial p = polynomial->next;
while (p) {
if (p->coef > 0) {
printf("+%.2fx^%d", p->coef, p->expn);
} else if (p->coef < 0) {
printf("%.2fx^%d", p->coef, p->expn);
}
p = p->next;
}
printf("\n");
}
// 加法
Polynomial addPolynomial(Polynomial p1, Polynomial p2) {
Polynomial res = createPolynomial();
Polynomial p = p1->next;
while (p) {
addNode(res, p->coef, p->expn);
p = p->next;
}
p = p2->next;
while (p) {
addNode(res, p->coef, p->expn);
p = p->next;
}
return res;
}
// 减法
Polynomial subPolynomial(Polynomial p1, Polynomial p2) {
Polynomial res = createPolynomial();
Polynomial p = p1->next;
while (p) {
addNode(res, p->coef, p->expn);
p = p->next;
}
p = p2->next;
while (p) {
addNode(res, -p->coef, p->expn);
p = p->next;
}
return res;
}
// 乘法
Polynomial mulPolynomial(Polynomial p1, Polynomial p2) {
Polynomial res = createPolynomial();
Polynomial p = p1->next;
while (p) {
Polynomial q = p2->next;
while (q) {
addNode(res, p->coef * q->coef, p->expn + q->expn);
q = q->next;
}
p = p->next;
}
return res;
}
int main() {
// 创建多项式
Polynomial p1 = createPolynomial();
Polynomial p2 = createPolynomial();
// 添加节点
addNode(p1, 2, 3);
addNode(p1, 3, 2);
addNode(p1, 5, 0);
addNode(p2, 1, 3);
addNode(p2, -2, 2);
addNode(p2, 3, 1);
addNode(p2, 4, 0);
// 打印多项式
printf("多项式1:");
printPolynomial(p1);
printf("多项式2:");
printPolynomial(p2);
// 加法
Polynomial p3 = addPolynomial(p1, p2);
printf("多项式1 + 多项式2:");
printPolynomial(p3);
// 减法
Polynomial p4 = subPolynomial(p1, p2);
printf("多项式1 - 多项式2:");
printPolynomial(p4);
// 乘法
Polynomial p5 = mulPolynomial(p1, p2);
printf("多项式1 * 多项式2:");
printPolynomial(p5);
return 0;
}
```
输出结果如下:
```
多项式1:+2.00x^3+3.00x^2+5.00
多项式2:+1.00x^3-2.00x^2+3.00x^1+4.00
多项式1 + 多项式2:+3.00x^3+1.00x^2+3.00x^1+9.00
多项式1 - 多项式2:+1.00x^3+5.00x^2-3.00x^1+1.00
多项式1 * 多项式2:+2.00x^6-1.00x^5+7.00x^4-16.00x^3+23.00x^2+31.00x^1+20.00
```