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

// 定义多项式节点结构体
typedef struct PolynomialNode {
    float coef; // 系数
    int exp; // 指数
    struct PolynomialNode *next; // 下一个节点指针
} PolynomialNode, *Polynomial;

// 创建多项式节点
PolynomialNode* createNode(float coef, int exp) {
    PolynomialNode *node = (PolynomialNode*)malloc(sizeof(PolynomialNode));
    node->coef = coef;
    node->exp = exp;
    node->next = NULL;
    return node;
}

// 释放多项式链表内存
void freePolynomial(Polynomial poly) {
    Polynomial p = poly;
    while (p) {
        Polynomial temp = p->next;
        free(p);
        p = temp;
    }
}

// 读入多项式
Polynomial readPolynomial() {
    int n;
    float coef;
    int exp;
    Polynomial head = createNode(0, 0); // 带头节点
    Polynomial tail = head; // 尾指针
    scanf("%d", &n);
    while (n--) {
        scanf("%f %d", &coef, &exp);
        PolynomialNode *node = createNode(coef, exp);
        tail->next = node;
        tail = node;
    }
    return head;
}

// 输出多项式
void printPolynomial(Polynomial poly) {
    Polynomial p = poly->next;
    while (p) {
        printf("%.1f %d ", p->coef, p->exp);
        p = p->next;
    }
    printf("\n");
}

// 多项式相加
Polynomial addPolynomial(Polynomial poly1, Polynomial poly2) {
    Polynomial head = createNode(0, 0); // 带头节点
    Polynomial tail = head; // 尾指针
    Polynomial p1 = poly1->next;
    Polynomial p2 = poly2->next;
    while (p1 && p2) {
        if (p1->exp > p2->exp) {
            tail->next = createNode(p1->coef, p1->exp);
            tail = tail->next;
            p1 = p1->next;
        } else if (p1->exp < p2->exp) {
            tail->next = createNode(p2->coef, p2->exp);
            tail = tail->next;
            p2 = p2->next;
        } else {
            float coef = p1->coef + p2->coef;
            if (coef != 0) {
                tail->next = createNode(coef, p1->exp);
                tail = tail->next;
            }
            p1 = p1->next;
            p2 = p2->next;
        }
    }
    while (p1) {
        tail->next = createNode(p1->coef, p1->exp);
        tail = tail->next;
        p1 = p1->next;
    }
    while (p2) {
        tail->next = createNode(p2->coef, p2->exp);
        tail = tail->next;
        p2 = p2->next;
    }
    return head;
}

int main() {
    Polynomial ha, hb, hc;
    ha = readPolynomial();
    hb = readPolynomial();
    hc = addPolynomial(ha, hb);
    printPolynomial(hc);
    freePolynomial(ha);
    freePolynomial(hb);
    freePolynomial(hc);
    return 0;
}
假定存储两多项式的带头节点的单链表Ha、Hb已经建立好用c语言写出实现两多项式相加的完整算法

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

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