数据结构与算法综合课程设计,一元多项式的表示及相加,用C语言实现
时间: 2024-02-25 08:55:39 浏览: 174
C++实现一元多项式的表示及相加
好的,我可以为您提供一种实现方法。
一元多项式可以用链表来表示,每个结点包含多项式的系数和指数,下一个结点的地址。具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式结点
typedef struct node {
int coef; // 系数
int expn; // 指数
struct node *next; // 下一个结点
} Node;
// 多项式相加函数
Node* AddPoly(Node *p1, Node *p2) {
Node *head, *tail, *p;
head = (Node*)malloc(sizeof(Node)); // 创建一个头结点
tail = head;
while (p1 && p2) { // 遍历两个多项式,直到其中一个为空
if (p1->expn < p2->expn) { // p1 指数小于 p2
tail->next = p1;
tail = p1;
p1 = p1->next;
} else if (p1->expn > p2->expn) { // p1 指数大于 p2
tail->next = p2;
tail = p2;
p2 = p2->next;
} else { // p1 和 p2 指数相等
p1->coef += p2->coef; // 系数相加
tail->next = p1;
tail = p1;
p1 = p1->next;
p = p2;
p2 = p2->next;
free(p); // p2 结点释放
}
}
tail->next = p1 ? p1 : p2; // 将未遍历完的多项式接入链表尾部
p = head;
head = head->next;
free(p); // 头结点释放
return head;
}
// 打印多项式
void PrintPoly(Node *head) {
if (!head) {
printf("0\n");
return;
}
while (head->next) {
printf("%dx^%d + ", head->next->coef, head->next->expn);
head = head->next;
}
printf("%dx^%d\n", head->coef, head->expn);
}
int main() {
Node *p1, *p2, *p3;
// 创建第一个多项式 1 + 2x + 3x^2
p1 = (Node*)malloc(sizeof(Node));
p1->coef = 1;
p1->expn = 0;
p1->next = (Node*)malloc(sizeof(Node));
p1->next->coef = 2;
p1->next->expn = 1;
p1->next->next = (Node*)malloc(sizeof(Node));
p1->next->next->coef = 3;
p1->next->next->expn = 2;
p1->next->next->next = NULL;
// 创建第二个多项式 -1 + 4x + 5x^2
p2 = (Node*)malloc(sizeof(Node));
p2->coef = -1;
p2->expn = 0;
p2->next = (Node*)malloc(sizeof(Node));
p2->next->coef = 4;
p2->next->expn = 1;
p2->next->next = (Node*)malloc(sizeof(Node));
p2->next->next->coef = 5;
p2->next->next->expn = 2;
p2->next->next->next = NULL;
// 多项式相加
p3 = AddPoly(p1, p2);
// 打印结果多项式
PrintPoly(p3);
return 0;
}
```
这个程序的输入为两个多项式,输出为它们相加的结果多项式。您可以根据自己的需求修改输入输出方式,或者将该函数封装为一个库函数供其他程序调用。
阅读全文