一、概述
通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数降序排列。
二、需求分析
建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果。
三、概要设计
3.1 存储结构
一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。
3.1.1 单连表的抽象数据类型定义ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:
R1={|ai-1,ai∈D,i=2,…,n}
基本操作:
InitList(&L)
//操作结果:构造一个空的线性表
CreatPolyn(&L)
//操作结果:构造一个以单连表存储的多项试
DispPolyn(L)
//操作结果:显示多项试
Polyn(&pa,&pb)
//操作结果:显示两个多项试相加,相减的结果
}ADTList;
3.1.2 本程序包含模块//定义单链表
typedefstructLNode
{
}LNode,*LinkList;
//定义一个空表
voidInitList(LinkList&L)
{}
//用单链表定义一个多项式
voidCreatPolyn(LinkList&L)
{}
//显示输入的多项式
voidDispPolyn(LinkListL)
{}
voidPolyn(LinkList&pa,LinkList&pb)
{}
voidmain()
{
//定义一个单连表;
cout<
LNode*L1,*L2;
Polyn(L1,L2);
}
各模块之间的调用关系如下:
3.2 基本算法
3.2.1 输入输出功能:将要进行运算的多项式输入输出
数据流入:要输入的多项式的系数与指数
数据流出:合并同类项后的多项式
程序流程图:多项式输入流程图如下图所示
测试要点:输入的多项式是否正确,若输入错误则重新输入
3.2.2 多项式的加法功能:将两多项式相加
数据流入:输入函数
数据流出:多项式相加后的结果
程序流程图:多项式的加法流程图如下图所示
测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算
3.2.3 多项式的减法功能:将两多项式相减
数据流入:调用输入函数
数据流出:多项式相减后的结果
程序流程图:多项式的减法流程图如下图所示
测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算
四、详细设计
4.1 单连表存储结构//定义单链表
typedefstructLNode
{
}LNode,*LinkList;
//定义一个空表
voidInitList(LinkList&L)
{}
//用单链表定义一个多项式
voidCreatPolyn(LinkList&L)
{}
//显示输入的多项式
voidDispPolyn(LinkListL)
{}
voidPolyn(LinkList&pa,LinkList&pb)
{}
4.2 主函数 mainvoidmain()
{
LNode*L1,*L2;
Polyn(L1,L2);
}
4.3 函数的调用关系层次结构
多项式 Polyn 用单链表定义多项式 CreatPolyn 定义一个空表 InitList 显示输入的多项式 DispPolyn。
五、 调试分析
采用单连表形式按照指数降序排列建立并输出多项式;在相加,相减的过程 中如果指数相同就执行系数相加,相减,否则就把大的项直接写入。完成两个多 项式的相加、相减;将从新得到的单连表结果输出;该算法的时间复杂度为两个 多项式的项式之和。
六、调试结果
6.1 测试的数据及结果
6.2 算法的时间复杂度及改进
6.2.1 算法的时间复杂度
一元多项式的加法运算的时间复杂度为O(m+n),减法运算的时间复杂度为O(m-n),其中m,n分别表示二个一元多项式的项数。
6.2.2 问题和改进思想
在设计该算法时,出现了一些问题,例如在建立链表时头指针的设立导致了之后运用到相关的指针时没能很好的移动指针出现了数据重复输出或是输出系统缺省值,不能实现算法。实现加法时该链表并没有向通常那样通过建立第三个链表来存放运算结果,而是再度利用了链表之一来进行节点的比较插入删除等操作。为了使输入数据按指数降序排列,可在数据的输入后先做一个节点的排序函数,通过对链表排序后再进行之后加减运算。
七、心得体会
一元多项式计算是一个的单链表的运用, 通过这个程序可以测我们以前的学习情 况,看看我们是否对单链表真正的理解。
一元多项式计算器的基本功能定为:
建立多项式
输出多项式
两个多项式相加,建立并输出和多项式
两个多项式相减,建立并输出差多项式能够按照指数降序排列建立并输出多项式
能够完成两个多项式的相加、相减,并将结果输出