用C语言实现一元多项式的运算的算法,需要用到单链表,步骤是创建一个新数组c 分别从头遍历比较a和b的每一项 指数相同,对应系数相加,若其和不为零,则在c中增加一个新项 指数不相同,则将指数较小的项复制到c中 一个多项式已遍历完毕时,将另一个剩余项依次复制到c中即可
时间: 2023-05-24 10:07:08 浏览: 83
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体表示节点
typedef struct node {
int coefficient; // 系数
int exponent; // 指数
struct node *next; // 指向下一个节点的指针
} Node;
// 创建一个新的节点
Node *createNode(int coefficient, int exponent) {
Node *newNode = (Node *) malloc(sizeof(Node));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
// 将一个节点插入到链表的末尾
void insertEnd(Node **head, int coefficient, int exponent) {
Node *newNode = createNode(coefficient, exponent);
if (*head == NULL) {
*head = newNode;
return;
}
Node *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
// 复制链表
Node *copyList(Node *head) {
Node *newHead = NULL, *newNode;
while (head != NULL) {
newNode = createNode(head->coefficient, head->exponent);
if (newHead == NULL) {
newHead = newNode;
} else {
insertEnd(&newHead, newNode->coefficient, newNode->exponent);
}
head = head->next;
}
return newHead;
}
// 从头遍历链表并打印每个节点的信息
void printList(Node *head) {
if (head == NULL) {
printf("链表为空\n");
return;
}
while (head != NULL) {
printf("%dX^%d", head->coefficient, head->exponent);
if (head->next != NULL) {
printf(" + ");
}
head = head->next;
}
printf("\n");
}
// 对两个多项式进行加法操作
Node *addPolynomials(Node *a, Node *b) {
Node *c = NULL; // 存储结果的链表
Node *pa = a, *pb = b;
while (pa != NULL && pb != NULL) {
// 如果两个节点的指数相等,则对应系数相加
if (pa->exponent == pb->exponent) {
int coefficient = pa->coefficient + pb->coefficient;
if (coefficient != 0) {
insertEnd(&c, coefficient, pa->exponent);
}
pa = pa->next;
pb = pb->next;
}
// 如果节点a的指数大于节点b的指数,则将节点a复制到结果中
else if (pa->exponent > pb->exponent) {
insertEnd(&c, pa->coefficient, pa->exponent);
pa = pa->next;
}
// 如果节点b的指数大于节点a的指数,则将节点b复制到结果中
else {
insertEnd(&c, pb->coefficient, pb->exponent);
pb = pb->next;
}
}
// 将剩余项复制到结果中
if (pa != NULL) {
c = copyList(pa);
} else if (pb != NULL) {
c = copyList(pb);
}
return c;
}
int main() {
// 创建第一个多项式 3X^2 + 2X + 5
Node *a = NULL;
insertEnd(&a, 3, 2);
insertEnd(&a, 2, 1);
insertEnd(&a, 5, 0);
printf("第一个多项式:");
printList(a);
// 创建第二个多项式 2X^3 + X^2 + 4X + 3
Node *b = NULL;
insertEnd(&b, 2, 3);
insertEnd(&b, 1, 2);
insertEnd(&b, 4, 1);
insertEnd(&b, 3, 0);
printf("第二个多项式:");
printList(b);
// 执行加法操作并打印结果
Node *c = addPolynomials(a, b);
printf("相加后的多项式:");
printList(c);
return 0;
}
阅读全文