符号多项式的操作,已经成为表处理的典型用例,在数学上,一个一元多项式Pn(x)可按升幂写成:
Pn(x)=p0+p1x1+p2x2+p3x3+…+pnxn
它由n+1个系数惟一确定。因此,在计算机里,它可用一个线性表P来表示:
P=(p0,p1,p2,p3,…,pn)
每一项的指数i隐含在其系数pi的序号里。
本节内容将主要讨论如何利用线性链表的基本操作为实现一元多项式的运算。
利用线性链表的基本操作来实现一元稀疏多项式的运算,实现抽象数据类型Polynomial。
ADT Polynomial{
数据对象:D={ ai | ai∈TermSet, i=1,2,...,m, m≥0
TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}
数据关系:R1={ <ai-1, ai>|ai-1, ai∈D, 且ai-1中的指数值<ai中的指数值,i=2,……,n}
基本操作:
CreatPolyn(&P,m)
操作结果:输入m项的系数和指数,建立一元多项式P。
DestroyPolyn(&P)
初始条件:一元多项式P已存在。
操作结果:销毁一元多项式P。
PrintPolyn(P)
初始条件:一元多项式P已存在。
操作结果:打印输出一元多项式P。
PolynLength(P)
初始条件:一元多项式P已存在。
操作结果:返回一元多项式P中的项数。
AddPolyn(&Pa,&Pb)
初始条件:一元多项式Pa和Pb已存在。
操作结果:完成多项式相加运算,即:Pa=Pa+Pb,并销毁一元多项式Pb。
SubtractPolyn(&Pa,&Pb)
初始条件:一元多项式Pa和Pb已存在。
操作结果:完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb。
MultiplyPolyn(&Pa,&Pb)
初始条件:一元多项式Pa和Pb已存在。
操作结果:完成多项式相乘运算,即:Pa=Pa×Pb,并销毁一元多项式Pb。
}ADT Polynomial
实现上述定义的一元多项式,显然应采用链式存储结构。如何实现用这种线性表表示的多相式的加法运算。
根据一元多项式相加的运算规则:对于两个一元多项式所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。