C语言实现一元多项式加法运算 - 详细代码解析
#include <stdio.h> #include <stdlib.h>
// 定义一元多项式的结构体 typedef struct { float coef; // 系数 int expn; // 指数 } ElemType;
// 定义一元多项式的链表节点 typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList;
// 函数声明 LinkList CreateList(); // 创建链表 void InsertList(LinkList L, ElemType e); // 插入节点 void AddList(LinkList A, LinkList B, LinkList C); // 相加
int main() { LinkList A, B, C; A = CreateList(); B = CreateList(); C = CreateList(); float coef; int expn; int n; printf("请输入第一个一元多项式的项数:"); scanf("%d", &n); printf("请按照指数从大到小的顺序输入系数和指数:\n"); for (int i = 0; i < n; i++) { scanf("%f%d", &coef, &expn); ElemType e = {coef, expn}; InsertList(A, e); } printf("请输入第二个一元多项式的项数:"); scanf("%d", &n); printf("请按照指数从大到小的顺序输入系数和指数:\n"); for (int i = 0; i < n; i++) { scanf("%f%d", &coef, &expn); ElemType e = {coef, expn}; InsertList(B, e); } AddList(A, B, C); printf("相加后的结果为:\n"); LinkList p = C->next; while (p) { printf(".2fx^%d", p->data.coef, p->data.expn); if (p->next != NULL) { printf("+"); } p = p->next; } return 0; }
// 创建链表 LinkList CreateList() { LinkList L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; return L; }
// 插入节点 void InsertList(LinkList L, ElemType e) { LinkList p = L; while (p->next && p->next->data.expn > e.expn) { p = p->next; } if (p->next && p->next->data.expn == e.expn) { // 如果指数相同,则系数相加 p->next->data.coef += e.coef; if (p->next->data.coef == 0) { // 如果系数为0,则删除该节点 LinkList q = p->next; p->next = q->next; free(q); } } else { // 否则插入新节点 LinkList q = (LinkList)malloc(sizeof(LNode)); q->data = e; q->next = p->next; p->next = q; } }
// 相加 void AddList(LinkList A, LinkList B, LinkList C) { LinkList p = A->next; LinkList q = B->next; while (p && q) { if (p->data.expn > q->data.expn) { InsertList(C, p->data); p = p->next; } else if (p->data.expn < q->data.expn) { InsertList(C, q->data); q = q->next; } else { ElemType e = {p->data.coef + q->data.coef, p->data.expn}; InsertList(C, e); p = p->next; q = q->next; } } while (p) { InsertList(C, p->data); p = p->next; } while (q) { InsertList(C, q->data); q = q->next; }
原文地址: https://www.cveoy.top/t/topic/lRHh 著作权归作者所有。请勿转载和采集!