一元多项式的表示及相加
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else {
//删除多项式 中当前结点 删除多项式PA中当前结点 删除多项式 DelFirst (ha, qa); FreeNode (qa);
} DelFirst (hb, qb); FreeNode (qb); qb = NextPos (Pb, hb); qa = NextPos (Pa, ha); break; case 1: //多项式 中当前结点的指数值小 多项式PB中当前结点的指数值小 多项式 DelFirst (hb, qb); InsFirst (ha, qb); qb = NextPos (Pb, hb); ha = NextPos (Pa, ha); break; } //switch } //while if (!ListEmpty (pb)) Append (Pa, qb); //链接 中剩余结点 链接Pb中剩余结点 链接 FreeNode (hb); //释放 的头结点 释放Pb的头结点 释放 } //AddPolyn
P = ( p0 , p1, p2 ,, pn )
.
2
是一元m次多项式 次多项式: m 假设 Qm (x) 是一元 次多项式:Q (x) = q0 + q1x + q2x
++ qmxm m<n). ( ).
则两个多项式相加的结果: 则两个多项式相加的结果: Rn (x) = P (x) + Qm (x) .用线性表可表示 n 为: = ( p0 +q0, p + q , pm + qm, pm+1, pn) . R , , 1 1 若对P,Q,R采用顺序存储结构,则问题很简单: 采用顺序存储结构,则问题很简单: 若对 采用顺序存储结构
一元多项式的实现: 一元多项式的实现: typedef OrderedLinkList polynomial; // 用带表头结点的有序链表表示多项式
结点的数据元素类型定义为: // 项的表示 typedef struct { // 系数 float coef; // 指数 int expn; } term, ElemType;
p0 p1 … pm … pn q0 q1 … qm p0 + q0 p1 + q1 … pm + qm … pn
+
但是对于形如
S(x) = 1 + 3x10000 – 2x20000
的多项式,上述表示方法是否合适? 的多项式,上述表示方法是否合适?
然而,在通常的应用中,多项式的次数可能很高且变化很大, 然而,在通常的应用中,多项式的次数可能很高且变化很大,使得顺序存储结 构的最大长度很难确定.例如:.就要用一长度为20001的线性表来表示,而表中 :.就要用一长度为 的线性表来表示, 构的最大长度很难确定.例如:.就要用一长度为 的线性表来表示 仅有3个非零元素 这种对内存空间的浪费是应该避免的. 个非零元素, 仅有 个非零元素,这种对内存空间的浪费是应该避免的. 为此我们可以用单链表来实现.在单链表中每个结点有两个数据项(系数项和 为此我们可以用单链表来实现.在单链表中每个结点有两个数据项( 指数项). 指数项). 例如: 相加. 例如: A17 ( x) = 7 + 3 x + 9 x8 + 5 x17 和 B8 ( x ) = 8 x + 22 x 7 9 x 8 相加. A -1 B -1 C -1 7 0 11 1 22 7 图2.14 多项式相加链式存储结构示例 5 17 ^ 8 1 22 7 -9 8 ^ 7 0 3 1 9 8 5 17 ^
则:M(x) = A(x) × B(x)
1 = A(x) × [b1x + b2 x
e
e2Fra Baidu bibliotek
+ + bn xen ]
n
=
∑ b A( x ) x
i =1 i
ei
其中每一项都是一个一元多项式. 其中每一项都是一个一元多项式.
本章小结 1. 了解线性表的逻辑结构特性是数据元素之间存在着线性关 系 , 在计算机中表示这种关系的两类不同的存储结构是顺序 存储结构和链式存储结构. 存储结构和链式存储结构 . 用前者表示的线性表简称为顺序 用后者表示的线性表简称为链表. 表,用后者表示的线性表简称为链表.
两个一元多项式相乘的算法,可以利用两个一元多项式相加的算法来实现, 两个一元多项式相乘的算法,可以利用两个一元多项式相加的算法来实现, 因为乘法运算可以分解为一系列的加法运算.假设A(x)和B(x)为多项式: 为多项式: 因为乘法运算可以分解为一系列的加法运算.假设 和 为多项式
Pn ( x) = p0 + p1xe1 + p2 xe2 + + pm xem
2.熟练掌握这两类存储结构的描述方法, 2.熟练掌握这两类存储结构的描述方法,以及线性表的各种基 熟练掌握这两类存储结构的描述方法 本操作的实现. 本操作的实现. 3.能够从时间复杂度中比较线性表两种存储结构的不同特点及其 3.能够从时间复杂度中比较线性表两种存储结构的不同特点及其 适用场合. 适用场合.
第二章 线性表
2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现
2.4 一元多项式的表示及相加
£2.4 一元多项式的表示及相加
在数学上,一个多项式可表示为: n 在数学上,一个多项式可表示为: P (x) = p0 + p x + p2x 1 线性表可表示为
2 n ++ pnx.用
多项式相加 算法 算法2.15如下: 如下: 如下 void AddPolyn (Polynomial &Pa, Polynomial &Pb) { //多项式加法:Pa = Pa + Pb,利用两个多项式的结点构成"和多项式". 多项式加法: 多项式加法 ,利用两个多项式的结点构成"和多项式" ha = GetHead (Pa); //ha和hb分别指向 和Pb的头结点 分别指向Pa和 的头结点 和 分别指向 hb = GetHead (Pb); qa = NextPos (Pa, ha); //qa和qb分别指向 和Pb中当前结点 分别指向Pa和 中当前结点 和 分别指向 qb = NextPos (Pb, hb); while (qa && qb) { //qa和qb均非空 和 均非空 a = GetCurElem (qa); //a和b为两表中当前比较元素 和 为两表中当前比较元素 b = GetCurElem (qb); switch (*cmp(a, b)) { case -1: //多项式 中当前结点的指数值小 多项式PA中当前结点的指数值小 多项式 ha = qa; qa = NextPos (Pa, qa); break; case 0: //两者的指数值相等 两者的指数值相等 sum = a.coef + b.coef; if (sum != 0.0) { //修改多项式 中 修改多项式PA中 修改多项式 //当前结点的系数值 当前结点的系数值 SetCurElem (qa, sum); ha = qa; }
�