====更新于2020年11月20日20点36分 =====
- 修复了乘法符号相反的bug
- 优化输出格式,使输出跟数学表达式一致
基本功能
- 一元多项式的加减
- 一元多项式的乘法
- 一元多项式的导数
- 一元多项式的输出为数学表达式
运行截图:
源代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct{
float coef;//系数
int expn;//指数
} Term;
typedef struct ploynomial{
Term term; //数据域
ploynomial* next; //指针域
} ploynomial,*LinkList;
// 初始化链表
void InitList(LinkList &L){
L= (ploynomial*)malloc(sizeof(ploynomial));//头结点
// 头结点不参与运算和输出,仅用来指向多项式的第一个结点
L->term.coef=0.0;
L->term.expn=-1;
L->next=NULL;
}
//比较结点的系数大小
int cmp(Term a,Term b){
if(a.expn>b.expn) return -1;
else if(a.expn==b.expn) return 0;
else return 1;
}
// 插入函数
// 这里用到了插入排序的思想
//将结点插入多项式链表的适当位置
void insertNode(LinkList &L,Term e){
ploynomial* q=L;
//从头结点的下一个结点开始往后遍历,找到第一个指数小于等于当前结点指数的结点
while(q->next!=NULL&&cmp(q->next->term,e)<0){
q=q->next;
}
//指数相同,系数相加,不用新建结点
if(q->next!=NULL&&cmp(q->next->term,e)==0) {
q->next->term.coef+=e