#include <stdio.h> #include <stdlib.h>

typedef struct PolyNode *Polynomial; struct PolyNode { int coef; // 系数 int expon; // 指数 Polynomial link; // 指向下一个节点的指针 };

// 创建新节点 Polynomial NewNode() { Polynomial P = (Polynomial)malloc(sizeof(struct PolyNode)); P->coef = 0; P->expon = 0; P->link = NULL; return P; }

// 读取多项式 Polynomial ReadPoly() { int N, c, e; Polynomial P, Rear, T;

P = NewNode(); // 创建头节点
Rear = P;
scanf("%d", &N);

while (N--) {
    scanf("%d %d", &c, &e);
    T = NewNode();
    T->coef = c;
    T->expon = e;
    Rear->link = T;
    Rear = T;
}

T = P;
P = P->link;
free(T); // 删除头节点
return P;

}

// 输出多项式 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->link;
}
printf("\n");

}

// 多项式相加 Polynomial AddPoly(Polynomial P1, Polynomial P2) { Polynomial Front, Rear, T; int sum;

Front = NewNode(); // 创建头节点
Rear = Front;

while (P1 && P2) {
    if (P1->expon == P2->expon) {
        sum = P1->coef + P2->coef;
        if (sum != 0) {
            T = NewNode();
            T->coef = sum;
            T->expon = P1->expon;
            Rear->link = T;
            Rear = T;
        }
        P1 = P1->link;
        P2 = P2->link;
    } else if (P1->expon > P2->expon) {
        T = NewNode();
        T->coef = P1->coef;
        T->expon = P1->expon;
        Rear->link = T;
        Rear = T;
        P1 = P1->link;
    } else {
        T = NewNode();
        T->coef = P2->coef;
        T->expon = P2->expon;
        Rear->link = T;
        Rear = T;
        P2 = P2->link;
    }
}

while (P1) {
    T = NewNode();
    T->coef = P1->coef;
    T->expon = P1->expon;
    Rear->link = T;
    Rear = T;
    P1 = P1->link;
}

while (P2) {
    T = NewNode();
    T->coef = P2->coef;
    T->expon = P2->expon;
    Rear->link = T;
    Rear = T;
    P2 = P2->link;
}

T = Front;
Front = Front->link;
free(T); // 删除头节点
return Front;

}

int main() { Polynomial P1, P2, PS, PD; P1 = ReadPoly(); P2 = ReadPoly(); PS = AddPoly(P1, P2); PD = AddPoly(P1, P2); PrintPoly(PS); PrintPoly(PD); return 0;

C语言实现一元多项式加法运算

原文地址: https://www.cveoy.top/t/topic/lRHg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录