c语言使用链表实现多项式的操作

该程序包括三个部分:头文件,多项式功能函数,主函数

`polynomial.h:定义了多项式相关的结构体和函数声明。 `Term` 结构体用于表示多项式的每一项 `Polynomial` 结构体用于表示整个多项式。同时定义了创建多项式、插入项、显示多项式、释放多项式、多项式相加和多项式相乘等函数的声明。 

 `polynomial.c`:实现了多项功能的函数。其中 `createPolynomial` 函数用于创建多项式,`insertTerm` 函数用于插入新的项到多项式中,按照项的次数从低到高排序。`displayPolynomial` 函数用于显示多项式的每一项。`freePolynomial` 函数用于释放多项式所占用的内存。`addPolynomials` 函数用于计算两个多项式的和。`multiplyPolynomials` 函数用于计算两个多项式的乘积。

 3. `main.c`:主程序文件,包含了 `main` 函数。在 `main` 函数中,首先创建两个空的多项式 `polyA` 和 `polyB`,然后要求用户输入每个多项式的非零项的个数及系数和次数。接着将用户输入的项依次插入到多项式中。然后显示输入的两个多项式。接下来计算两个多项式的和和乘积,分别保存在新的多项式中,并显示结果。最后释放所有多项式占用的内存。

以下是代码部分:

`polynomial.h

#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

// 多项式结构体创建  定义了一个多项式和项的结构体
//Term 结构体包含了一个项的系数和指数,以及一个指向下一个项的指针。=
typedef struct Term {
    int coefficient;
    int power;
    struct Term* next;
} Term;
//Polynomial 结构体包含指向多项式的第一个项的指针。 
typedef struct Polynomial {
    Term* head;
} Polynomial;
//声明了一些函数来操作多项式
//createPolynomial: 用于创建一个新的多项式。
Polynomial* createPolynomial();
//insertTerm: 用于向多项式中插入一个新的项。
void insertTerm(Polynomial* poly, int coeff, int power);
//displayPolynomial: 用于显示多项式的内容。
void displayPolynomial(Polynomial* poly);
//freePolynomial: 用于释放多项式所占用的内存。
void freePolynomial(Polynomial* poly);
//addPolynomials: 用于将两个多项式相加。
Polynomial* addPolynomials(Polynomial* polyA, Polynomial* polyB);
//multiplyPolynomials: 用于将两个多项式相乘
Polynomial* multiplyPolynomials(Polynomial* polyA, Polynomial* polyB);

#endif /* POLYNOMIAL_H */

polynomial.c

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

//实现了多项式的基本操作

//createPolynomial() 函数用于创建一个空的多项式,
//分配了一个 Polynomial 结构体,并初始化其中的 head 为 NULL。

Polynomial* createPolynomial() {
    Polynomial* poly = (Polynomial*)malloc(sizeof(Polynomial));
    if (poly == NULL) {
        printf("内存分配失败.\n");
        exit(1);
    }
    poly->head = NULL;
    return poly;
}
//insertTerm() 函数用于向多项式中插入一个新的项,分配了一个多项式结构体,按照指数从小到大的顺序插入到多项式中。

void insertTerm(Polynomial* poly, int coeff, int power) {
    Term* newTerm = (Term*)malloc(sizeof(Term));
    if (newTerm == NULL) {
        printf("内存分配失败.\n");
        exit(1);
    }
    newTerm->coefficient = coeff;
    newTerm->power = power;
    newTerm->next = NULL;

    if (poly->head == NULL || power < poly->head->power) {
        newTerm->next = poly->head;
        poly->head = newTerm;
    } else {
        Term* current = poly->head;
        while (current->next != NULL && current->next->power <= power) {
            current = current->next;
        }
        newTerm->next = current->next;
        current->next = newTerm;
    }
}
//displayPolynomial() 函数用于显示多项式的内容,按照项的格式 (系数)x^指数 逐项打印多项式的各项。

void displayPolynomial(Polynomial* poly) {
    if (poly == NULL || poly->head == NULL) {
        printf("多项式为空.\n");
        return;
    }
    Term* current = poly->head;
    while (current != NULL) {
        printf("(%d)x^%d ", current->coefficient, current->power);
        if (current->next != NULL) {
            printf("+ ");
        }
        current = current->next;
    }
    printf("\n");
}
//释放多项式所占的内存

void freePolynomial(Polynomial* poly) {
    if (poly == NULL) {
        return;
    }
    Term* current = poly->head;
    while (current != NULL) {
        Term* temp = current;
        current = current->next;
        free(temp);
    }
    free(poly);
}
//addPolynomials() 函数用于实现多项式的加法,按照指数的大小合并两个多项式的项,并返回结果多项式。

Polynomial* addPolynomials(Polynomial* polyA, Polynomial* polyB) {
    Polynomial* result = createPolynomial();
    Term* currentA = polyA->head;
    Term* currentB = polyB->head;

    while (currentA != NULL && currentB != NULL) {
        if (currentA->power > currentB->power) {
            insertTerm(result, currentA->coefficient, currentA->power);
            currentA = currentA->next;
        } else if (currentA->power < currentB->power) {
            insertTerm(result, currentB->coefficient, currentB->power);
            currentB = currentB->next;
        } else {
            insertTerm(result, currentA->coefficient + currentB->coefficient, currentA->power);
            currentA = currentA->next;
            currentB = currentB->next;
        }
    }

    while (currentA != NULL) {
        insertTerm(result, currentA->coefficient, currentA->power);
        currentA = currentA->next;
    }

    while (currentB != NULL) {
        insertTerm(result, currentB->coefficient, currentB->power);
        currentB = currentB->next;
    }

    return result;
}
//multiplyPolynomials() 函数用于实现多项式的乘法,将两个多项式的各项相乘并相加得到结果多项式。
Polynomial* multiplyPolynomials(Polynomial* polyA, Polynomial* polyB) {
    Polynomial* result = createPolynomial();
    Term* currentA = polyA->head;
    while (currentA != NULL) {
        Term* currentB = polyB->head;
        while (currentB != NULL) {
            int coeff = currentA->coefficient * currentB->coefficient;
            int power = currentA->power + currentB->power;
            insertTerm(result, coeff, power);
            currentB = currentB->next;
        }
        currentA = currentA->next;
    }
    return result;
}

main.c

#include <stdio.h>
#include "polynomial.h"

//导入头文件"polynomial.h"

//创建多项式 
//插入多项式的项 
//显示多项式 
//多项式相加 
//多项式相乘 
int main() {
//创建了两个多项式polyA和polyB
    Polynomial* polyA = createPolynomial();
    Polynomial* polyB = createPolynomial();
//交互界面 
//多项式A和B的项数和系数幂值对。
    int termsA, termsB;
    printf("请输入多项式A的项数: ");
    scanf("%d", &termsA);
    printf("请入多项式A的系数幂值对:\n");
    for (int i = 0; i < termsA; i++) {
        int coeff, power;
        scanf("%d %d", &coeff, &power);
        insertTerm(polyA, coeff, power);
    }

    printf("请输入多项式B的项数: ");
    scanf("%d", &termsB);
    printf("请输入多项式B的系数幂值对:\n");
    for (int i = 0; i < termsB; i++) {
        int coeff, power;
        scanf("%d %d", &coeff, &power);
        insertTerm(polyB, coeff, power);
    }

    printf("多项式A: ");
    displayPolynomial(polyA);
    printf("多项式B: ");
    displayPolynomial(polyB);

    Polynomial* sum = addPolynomials(polyA, polyB);
    printf("多项式的和: ");
    displayPolynomial(sum);

    Polynomial* product = multiplyPolynomials(polyA, polyB);
    printf("多项式的乘积: ");
    displayPolynomial(product);
//释放了内存并结束程序。
    freePolynomial(polyA);
    freePolynomial(polyB);
    freePolynomial(sum);
    freePolynomial(product);

    return 0;
}

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值