假定存储两多项式的带头节点的单链表Ha、Hb已经建立好用c语言写出实现两多项式相加的完整算法
#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;
}
原文地址: http://www.cveoy.top/t/topic/bgC9 著作权归作者所有。请勿转载和采集!