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

typedef struct Node {
    int coef; // 系数
    int exp; // 指数
    struct Node *next; // 指向下一个节点的指针
} Node, *Polynomial;

// 创建一个带头节点的单链表,其中头节点的指数为-1,系数无意义
Polynomial create() {
    Polynomial head = (Polynomial)malloc(sizeof(Node));
    head->exp = -1;
    head->coef = 0;
    head->next = NULL;
    return head;
}

// 将一个项加入到多项式中
void insert(Polynomial poly, int coef, int exp) {
    Polynomial p = poly;
    while (p->next != NULL && p->next->exp > exp) {
        p = p->next;
    }
    if (p->next != NULL && p->next->exp == exp) {
        p->next->coef += coef;
        if (p->next->coef == 0) {
            Polynomial q = p->next;
            p->next = q->next;
            free(q);
        }
    } else {
        Polynomial q = (Polynomial)malloc(sizeof(Node));
        q->coef = coef;
        q->exp = exp;
        q->next = p->next;
        p->next = q;
    }
}

// 释放一个多项式所占用的内存
void destroy(Polynomial poly) {
    Polynomial p = poly;
    while (p != NULL) {
        Polynomial q = p->next;
        free(p);
        p = q;
    }
}

// 将两个多项式相加
Polynomial add(Polynomial poly1, Polynomial poly2) {
    Polynomial poly = create();
    Polynomial p = poly1->next, q = poly2->next;
    while (p != NULL && q != NULL) {
        if (p->exp > q->exp) {
            insert(poly, p->coef, p->exp);
            p = p->next;
        } else if (p->exp < q->exp) {
            insert(poly, q->coef, q->exp);
            q = q->next;
        } else {
            insert(poly, p->coef + q->coef, p->exp);
            p = p->next;
            q = q->next;
        }
    }
    while (p != NULL) {
        insert(poly, p->coef, p->exp);
        p = p->next;
    }
    while (q != NULL) {
        insert(poly, q->coef, q->exp);
        q = q->next;
    }
    return poly;
}

// 输出一个多项式
void print(Polynomial poly) {
    Polynomial p = poly->next;
    while (p != NULL) {
        printf("%d*x^%d", p->coef, p->exp);
        if (p->next != NULL) {
            printf(" + ");
        }
        p = p->next;
    }
    printf("\n");
}

int main() {
    Polynomial poly1 = create();
    insert(poly1, 2, 3);
    insert(poly1, 4, 1);
    insert(poly1, 3, 0);
    printf("poly1: ");
    print(poly1);

    Polynomial poly2 = create();
    insert(poly2, 3, 2);
    insert(poly2, 1, 1);
    insert(poly2, 5, 0);
    printf("poly2: ");
    print(poly2);

    Polynomial poly = add(poly1, poly2);
    printf("poly1 + poly2: ");
    print(poly);

    destroy(poly1);
    destroy(poly2);
    destroy(poly);
    return 0;
}
用c语言写出实现两多项式相加的完整算法假定储存两多项式的带头节点的单链表HaHb已经建立好

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

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