C语言实现单链表存储多项式及多项式相加
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
注意:
- 此示例代码仅供参考,具体情况下您可能需要根据自己的实际需求进行适当的修改和调整。
- 为了方便阅读,代码中的中文提示信息可以根据实际情况替换为英文。
- 代码中的注释可以帮助您更好地理解代码逻辑。
原文地址: https://www.cveoy.top/t/topic/mTW 著作权归作者所有。请勿转载和采集!