一元多项式的加法c语言实现
时间: 2023-05-29 16:05:52 浏览: 57
以下是一元多项式的加法的C语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式结构体
struct PolyNode{
int coef; // 系数
int expon; // 指数
struct PolyNode *next;
};
typedef struct PolyNode *Polynomial;
// 多项式加法
Polynomial PolyAdd (Polynomial P1, Polynomial P2) {
Polynomial front, rear, temp;
int sum;
rear = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建一个节点
front = rear; // 头结点
while (P1 && P2) {
if (P1->expon > P2->expon) { // P1的指数大
rear->next = P1;
rear = P1;
P1 = P1->next;
} else if (P1->expon < P2->expon) { // P2的指数大
rear->next = P2;
rear = P2;
P2 = P2->next;
} else { // 指数相同
sum = P1->coef + P2->coef;
if (sum) { // 系数相加不为0
temp = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建一个节点
temp->coef = sum;
temp->expon = P1->expon;
rear->next = temp;
rear = temp;
}
P1 = P1->next;
P2 = P2->next;
}
}
// 将未处理完的部分直接链接到结果多项式中
for (; P1; P1 = P1->next) {
temp = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建一个节点
temp->coef = P1->coef;
temp->expon = P1->expon;
rear->next = temp;
rear = temp;
}
for (; P2; P2 = P2->next) {
temp = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建一个节点
temp->coef = P2->coef;
temp->expon = P2->expon;
rear->next = temp;
rear = temp;
}
rear->next = NULL;
temp = front;
front = front->next;
free(temp); // 释放头结点
return front;
}
// 多项式输出
void PrintPoly (Polynomial P) {
if (!P) { // 多项式为空
printf("0 0\n");
return;
}
while (P) {
printf("%d %d", P->coef, P->expon);
P = P->next;
if (P) printf(" "); // 最后一个节点不输出空格
}
printf("\n");
}
int main() {
Polynomial P1, P2, PP;
int N, i;
// 多项式P1
P1 = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建头结点
P1->next = NULL;
scanf("%d", &N);
for (i = 0; i < N; i++) {
Polynomial temp = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建一个节点
scanf("%d %d", &temp->coef, &temp->expon);
temp->next = NULL;
// 插入节点
Polynomial p = P1;
while (p->next && p->next->expon > temp->expon) p = p->next;
if (p->next && p->next->expon == temp->expon) {
p->next->coef += temp->coef;
if (p->next->coef == 0) { // 相加后系数为0,删除该节点
Polynomial t = p->next;
p->next = t->next;
free(t);
}
free(temp);
} else {
temp->next = p->next;
p->next = temp;
}
}
// 多项式P2
P2 = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建头结点
P2->next = NULL;
scanf("%d", &N);
for (i = 0; i < N; i++) {
Polynomial temp = (Polynomial) malloc(sizeof(struct PolyNode)); // 新建一个节点
scanf("%d %d", &temp->coef, &temp->expon);
temp->next = NULL;
// 插入节点
Polynomial p = P2;
while (p->next && p->next->expon > temp->expon) p = p->next;
if (p->next && p->next->expon == temp->expon) {
p->next->coef += temp->coef;
if (p->next->coef == 0) { // 相加后系数为0,删除该节点
Polynomial t = p->next;
p->next = t->next;
free(t);
}
free(temp);
} else {
temp->next = p->next;
p->next = temp;
}
}
// 多项式相加
PP = PolyAdd(P1->next, P2->next);
// 输出结果
PrintPoly(PP);
return 0;
}
```
输入格式为:
```
多项式1项数
多项式1每项系数和指数
多项式2项数
多项式2每项系数和指数
```
例如,输入:
```
3
4 3
2 1
1 0
2
3 2
1 1
```
则表示多项式P1为4x^3+2x+1,多项式P2为3x^2+x,输出结果为:
```
4 3 3 2 3 1 1 0
```