C语言实现单链表存储多项式及多项式相加

本文将介绍如何使用C语言实现单链表存储多项式,并提供两个一元多项式A与B相加的函数代码示例。

问题描述

编写一个程序,使用单链表存储多项式,并实现两个一元多项式A与B相加的函数。A,B刚开始是无序的,A与B之和按降序排列。

例如:

多项式A: 1.2X^0 2.5X^1 3.2X^3 -2.5X^5

多项式B: -1.2X^0 2.5X^1 3.2X^3 2.5X^5 5.4X^10

多项式A与B之和:5.4X^10 6.4X^3 5X^1

【输入形式】

任意两个多项式A和B

【输出形式】

多项式中某一项的系数与指数,系数保留一位小数

【输入样例】

1.2 0 2.5 1 3.2 3 -2.5 5 -1.2 0 2.5 1 3.2 3 2.5 5 5.4 10

【输出样例】

5.4 10 6.4 3 5.0 1

代码实现

以下是用单链表存储多项式,并实现两个一元多项式A与B相加的C语言程序示例:

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

typedef struct PolyNode {
    float coef;
    int exp;
    struct PolyNode* next;
} PolyNode;

PolyNode* createNode(float coef, int exp) {
    PolyNode* node = (PolyNode*)malloc(sizeof(PolyNode));
    node->coef = coef;
    node->exp = exp;
    node->next = NULL;
    return node;
}

void insertTerm(PolyNode** poly, float coef, int exp) {
    PolyNode* newNode = createNode(coef, exp);

    if (*poly == NULL) {
        *poly = newNode;
    } else {
        PolyNode* curr = *poly;
        PolyNode* prev = NULL;

        while (curr != NULL && curr->exp > exp) {
            prev = curr;
            curr = curr->next;
        }

        if (curr != NULL && curr->exp == exp) {
            curr->coef += coef;
            free(newNode);
        } else {
            newNode->next = curr;
            if (prev == NULL) {
                *poly = newNode;
            } else {
                prev->next = newNode;
            }
        }
    }
}

PolyNode* addPolynomials(PolyNode* polyA, PolyNode* polyB) {
    PolyNode* result = NULL;

    while (polyA != NULL || polyB != NULL) {
        if (polyA != NULL && polyB != NULL) {
            if (polyA->exp > polyB->exp) {
                insertTerm(&result, polyA->coef, polyA->exp);
                polyA = polyA->next;
            } else if (polyA->exp < polyB->exp) {
                insertTerm(&result, polyB->coef, polyB->exp);
                polyB = polyB->next;
            } else {
                float sum = polyA->coef + polyB->coef;
                if (sum != 0.0) {
                    insertTerm(&result, sum, polyA->exp);
                }
                polyA = polyA->next;
                polyB = polyB->next;
            }
        } else if (polyA != NULL) {
            insertTerm(&result, polyA->coef, polyA->exp);
            polyA = polyA->next;
        } else {
            insertTerm(&result, polyB->coef, polyB->exp);
            polyB = polyB->next;
        }
    }

    return result;
}

void printPolynomial(PolyNode* poly) {
    if (poly == NULL) {
        printf('0');
    } else {
        while (poly != NULL) {
            printf('%.1fX^%d ', poly->coef, poly->exp);
            poly = poly->next;
        }
    }
    printf('
');
}

void freePolynomial(PolyNode* poly) {
    PolyNode* curr = poly;
    while (curr != NULL) {
        PolyNode* temp = curr;
        curr = curr->next;
        free(temp);
    }
}

int main() {
    PolyNode* polyA = NULL;
    PolyNode* polyB = NULL;
    PolyNode* sum = NULL;

    int numTermsA, numTermsB;
    float coef;
    int exp;

    printf('输入多项式A的项数:');
    scanf('%d', &numTermsA);
    printf('输入多项式A的系数和指数:');
    for (int i = 0; i < numTermsA; i++) {
        scanf('%f %d', &coef, &exp);
        insertTerm(&polyA, coef, exp);
    }

    printf('输入多项式B的项数:');
    scanf('%d', &numTermsB);
    printf('输入多项式B的系数和指数:');
    for (int i = 0; i < numTermsB; i++) {
        scanf('%f %d', &coef, &exp);
        insertTerm(&polyB, coef, exp);
    }

    sum = addPolynomials(polyA, polyB);

    printf('多项式A与B之和:');
    printPolynomial(sum);

    freePolynomial(polyA);
    freePolynomial(polyB);
    freePolynomial(sum);

    return 0;
}

您可以按照程序提示输入多项式A和B的项数、系数和指数,然后程序将计算两个多项式之和并输出结果。例如,按照输入样例提供的多项式A和B的项数、系数和指数,程序将输出多项式A与B之和:5.4X^10 6.4X^3 5.0X^1

注意:

  • 此示例代码仅供参考,具体情况下您可能需要根据自己的实际需求进行适当的修改和调整。
  • 为了方便阅读,代码中的中文提示信息可以根据实际情况替换为英文。
  • 代码中的注释可以帮助您更好地理解代码逻辑。
C语言实现单链表存储多项式及多项式相加

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

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