基于C语言实现简单的一元多项式加法
本文参考自《大话数据结构》,有错漏的地方欢迎指点。
正在复习数据结构,因为还没有复习到树结构,所以这里只是用链表对一元多项式加法做简单的实现,待后面复习到树结构,会对多项式加法进行重构。
1.算法思路
一元多项式的结构固定为Ax^n,因为x是固定的,所以结构体里只需要存储系数A和指数n就行;
一元多项式Ax^n的结构分为4种:
- A=0,n!=0时,多项式为x^n,此时系数coef=0,指数exp=n;
- A!=0,n=0时,多项式为A,此时系数coef=A,指数exp=0;
- A=0,n=0时,多项式为0,此时系数coef=0,指数exp=0;
- A!=0,n!=0时,多项式为Ax^n,此时系数coef=A,指数exp=n;
这里的想法是将多项式临时存储在一个字符数组里,然后对多项式每一项进行解析,得到单项的系数和指数,然后申请内存空间来存放系数和指数,然后将这个结点的指数(简称a)与和多项式的结点的指数(简称b)进行比较,如果:
- a > b,则将a结点链接在b结点的前面;
- a = b,则将a结点系数与b结点系数相加,保存在b结点中;
- a < b,则继续遍历和多项式的下一个结点(next指针);
最后得到的和多项式就是运算结果。
2.多项式基本数据结构
struct Term{
float coef; //系数
int exp; //指数
Term* next; //下一个结点指针
Term* front;//前一个结点
}
3.具体实现代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int firstFlag = 1; //判断是不是第一个结点
struct Term{
int coef; //系数
int exp; //指数
Term* next; //下一个结点
Term* front;//前一个结点
};
/* 打印多项式 */
void displayTerm(Term* sumTerm){
Term* currentTerm = sumTerm; //当前指针
while(currentTerm!=NULL){
if(currentTerm->front!=NULL){
printf("+");
}
if(currentTerm->coef != 1){
printf("%d"