C语言实现一元多项式加法运算
以下是一元多项式加法的C语言代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct PolyNode *PtrToPolyNode;
struct PolyNode {
int coef; // 系数
int expon; // 指数
PtrToPolyNode Next; // 指向下一个结点的指针
};
typedef PtrToPolyNode Polynomial;
Polynomial ReadPoly();
Polynomial Add(Polynomial P1, Polynomial P2);
void PrintPoly(Polynomial P);
int main()
{
Polynomial P1, P2, PP;
P1 = ReadPoly();
P2 = ReadPoly();
PP = Add(P1, P2);
PrintPoly(PP);
return 0;
}
Polynomial ReadPoly()
{
Polynomial P, Rear, TmpCell;
int N, c, e;
scanf("%d", &N);
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->Next = NULL;
Rear = P;
while (N--) {
scanf("%d %d", &c, &e);
TmpCell = (Polynomial)malloc(sizeof(struct PolyNode));
TmpCell->coef = c;
TmpCell->expon = e;
TmpCell->Next = NULL;
Rear->Next = TmpCell;
Rear = TmpCell;
}
return P;
}
Polynomial Add(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) {
sum = P1->coef + P2->coef;
if (sum) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = sum;
temp->expon = P1->expon;
rear->Next = temp;
rear = temp;
}
P1 = P1->Next;
P2 = P2->Next;
} else if (P1->expon > P2->expon) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = P1->coef;
temp->expon = P1->expon;
rear->Next = temp;
rear = temp;
P1 = P1->Next;
} else {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = P2->coef;
temp->expon = P2->expon;
rear->Next = temp;
rear = temp;
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)
{
int flag = 0;
if (!P) {
printf("0 0\n");
return;
}
while (P) {
if (!flag)
flag = 1;
else
printf(" ");
printf("%d %d", P->coef, P->expon);
P = P->Next;
}
printf("\n");
}
代码中,定义了一个结构体 PolyNode 作为链表的结点,其中包含了系数、指数和指向下一个结点的指针。同时,还定义了链表的头结点为 Polynomial 类型。
输入一元多项式时,先输入多项式的项数 N,然后依次输入每一项的系数和指数。读入后创建一个新结点,并将其插入到链表的尾部。
进行多项式加法时,使用两个指针 P1 和 P2 分别指向两个多项式的当前结点,然后依次比较它们的指数,如果相等,则将系数相加并创建一个新结点插入到结果链表中;如果 P1 的指数较大,则将 P1 的当前结点插入到结果链表中;如果 P2 的指数较大,则将 P2 的当前结点插入到结果链表中。当其中一个多项式遍历结束后,将另一个多项式剩余的结点插入到结果链表的尾部。
最后,输出结果链表中的每一项,注意处理一些特殊情况,如结果多项式为 0 时,输出 0 0。
原文地址: https://www.cveoy.top/t/topic/lRHu 著作权归作者所有。请勿转载和采集!