一元多项式的表示和相加 C语言完整代码
时间: 2024-03-02 15:48:31 浏览: 14
下面是一元多项式的表示和相加的完整C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode {
int coef; // 系数
int expon; // 指数
struct PolyNode *next; // 指向下一个节点的指针
} PolyNode, *Polynomial;
Polynomial create() {
Polynomial p = NULL, tail = NULL; // 定义链表及其尾指针
int n;
printf("请输入多项式的项数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
PolyNode *temp = (PolyNode *)malloc(sizeof(PolyNode)); // 创建新节点
printf("请输入第%d项的系数和指数:", i + 1);
scanf("%d %d", &temp->coef, &temp->expon);
temp->next = NULL;
if (!p) {
p = tail = temp;
} else {
tail->next = temp;
tail = temp;
}
}
return p;
}
void print(Polynomial p) {
while (p) {
printf("%dx^%d", p->coef, p->expon);
if (p->next) {
printf(" + ");
}
p = p->next;
}
printf("\n");
}
Polynomial add(Polynomial p1, Polynomial p2) {
Polynomial result = NULL, tail = NULL; // 定义新链表及其尾指针
// 遍历两个链表
while (p1 && p2) {
PolyNode *temp = (PolyNode *)malloc(sizeof(PolyNode)); // 创建新节点
if (p1->expon == p2->expon) { // 如果指数相同
temp->coef = p1->coef + p2->coef; // 系数相加
temp->expon = p1->expon;
p1 = p1->next; // 指针向后移动一位
p2 = p2->next;
} else if (p1->expon > p2->expon) { // 如果p1的指数更大
temp->coef = p1->coef;
temp->expon = p1->expon;
p1 = p1->next;
} else { // 如果p2的指数更大
temp->coef = p2->coef;
temp->expon = p2->expon;
p2 = p2->next;
}
temp->next = NULL; // 将新节点插入到新链表中
if (!result) {
result = tail = temp;
} else {
tail->next = temp;
tail = temp;
}
}
// 将剩余的节点插入到新链表中
while (p1) {
PolyNode *temp = (PolyNode *)malloc(sizeof(PolyNode));
temp->coef = p1->coef;
temp->expon = p1->expon;
temp->next = NULL;
if (!result) {
result = tail = temp;
} else {
tail->next = temp;
tail = temp;
}
p1 = p1->next;
}
while (p2) {
PolyNode *temp = (PolyNode *)malloc(sizeof(PolyNode));
temp->coef = p2->coef;
temp->expon = p2->expon;
temp->next = NULL;
if (!result) {
result = tail = temp;
} else {
tail->next = temp;
tail = temp;
}
p2 = p2->next;
}
return result; // 返回新链表作为相加后的结果
}
int main() {
printf("创建第一个多项式:\n");
Polynomial p1 = create();
printf("第一个多项式:");
print(p1);
printf("创建第二个多项式:\n");
Polynomial p2 = create();
printf("第二个多项式:");
print(p2);
Polynomial result = add(p1, p2);
printf("相加后的多项式:");
print(result);
return 0;
}
```