数据结构线性表2一元多项式的表示及相加

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可以下列线性表表示: ( (p1, e1) , (p2, e2), … , (pm, em) )
将单链表的每个结点对应着一元多项式中的 一个非零项,它由三个域组成,分别表示非 零项的系数、指数和指向下一个结点的指针。
§2.4 一元多项式的表示及相加
例: P99(x) = 7x3 - 2x12 - 8x99 可用线性表( (7, 3),(-2, 12),(-8, 99) )表示:
} ADT Polynomial
§2.4 一元多项式的表示及相加
❖实现思路
▪ 依次比较Pa和Pb所指结点中的指数项,依
Pa―>expn =、<、> Pb―>expn等情况,再决
定是将两系数域的数值相加(并判其和是否为 0),还是将较高指数项的结点插入到新表C中。
§2.4 一元多项式的表示及相加 ❖例1:设两个一元多项式为
headA head B
40 23
64 -5 8
58 3 12
4 12 ∧ 7 15 ∧
headC
40
23
64
7 12
源自文库
7 15 ∧
C(x)= 4+2x3 + 6x4 + 7x12 + 7x15
§2.4 一元多项式的表示及相加
Void AddPolyn( polynomial &pa, polynomial &pb ) { ha=GetHead(pa); hb=GetHead(pb) ; // ha和hb分别指向Pa和Pb的头结点 int cmp (term a,term b); qa=NextPos(pa, ha); qb=NextPos(pb, hb) ; 依a的指数值<(或=)(或 //qa和qb分别指向Pa和Pb中当前结点 >)b的指数值,分别返回while (qa && qb ) { //Pa和Pb均非空 1,0和1; a=GetCurElem(qa); b=GetCurElem(qb); //a和b为两表中当前比较元素 switch(*cmp(a, b) ) { case -1; //pa当前的指数小于pb当前的指数 ha=qa; qa=NextPos(pa, qa); break; case 1; //pa当前的指数大于pb当前的指数 DelFirst(hb,qb); InsFirst(ha,qb); qb=NextPos(pb, hb); ha=NextPos(pa, ha); break;
§2.4 一元多项式的表示及相加
❖抽象数据类型一元多项式的定义
ADT Polynomial { 数据对象: D={ ai|ai∈TermSet, i=1,2,...,m, m≥0 TermSet 中的每个元素包含一个表示系数的实数和表示指数的整数 } 数据关系: R={ <ai-1,ai>|ai-1 ,ai∈D, i=2,...,n 且ai-1中的指数值<ai中的指数值 } 基本操作: CreatPolyn(&P,m) 操作结果:输入m项的系数和指数,建立一元多项式P DestroyPolyn(&P) 操作结果:销毁一元多项式P PrintPolyn(P) 操作结果:打印输出一元多项式P。 PolynLength(P) 操作结果:返回一元多项式P中的项数。 AddPolyn(&Pa,&Pb) 操作结果:完成多项式相加运算,并销毁一元多项式 SubtractPolyn(&Pa,&Pb) 操作结果:完成多项式相减运算,并销毁一元多项式Pb MultiplyPolyn(&Pa,&Pb) 操作结果:完成多项式相乘运算,并销毁一元多项式Pb
Head
73
-2 12
-8 99 /\
§2.4 一元多项式的表示及相加
❖一元多项式的表示
结点的数据元素类型定义为: typedef struct poly_node *poly_pointer; typedef struct poly_node {// 项的表示
float coef; // 系数 int expn; // 指数 poly_pointer link; //指针 };
A(x)= 3x14 + 2x8 + 1 B(x)= 8x14 - 3x10 + 10x6
求此两一元多项式之和: C(x)=A(x)+B(x)
§2.4 一元多项式的表示及相加
Pa
A
3 14
Pb
B
8 14
Pc
C 11 14
Pa 28 Pb -3 10 Pc -3 10
Pa 1 0 /\ Pb 10 6 /\ Pc 28
§2.4 一元多项式的表示及相加
case 0;
sum=a.coef+b.coef;
if (sum!=0) { //修改pa当前结点系数
SetCurElem(qa,sum); ha=qa; }
else { //删除pa当前结点
DelFirst(ha,qa); FreeNode(qa); }
DelFirst(hb,qb); FreeNode(qb);
S (x) = 1 + 3x10000 – 2x20000
的多项式,上述表示方法是否合适?
§2.4 一元多项式的表示及相加
一般情况下的一元稀疏多项式可写成 Pn(x) = p1xe1 + p2xe2 + ┄ + pmxem
其中:pi 是指数为 ei 的项的非零系数, 0 ≤ e1 < e2 < … < em = n
Pc
Pa Pb
Pc 10 6
1 0 /\
§2.4 一元多项式的表示及相加 ❖例2:设两个一元多项式为
A(x)= 4 + 6x4 + 5x8 + 4x12 B(x)= 2x3 - 5x8 + 3x12 + 7x15
求此两一元多项式之和: C(x)=A(x)+B(x)
§2.4 一元多项式的表示及相加
qb=NextPos(pb,hb); qa=NextPos(pa,ha); break;
} // switch
} //while
if (!ListEmpty(pb)) Append(pa, qb) ; //链接pb剩余结点
第2章 线性表
线性表的类型定义 线性表的顺序表示和实现 线性表的链式表示和实现 一元多项式的表示及相加
§2.4 一元多项式的表示及相加
pn ( x) p0 p1x p2 x2 ... pn xn
计算机中,可以用一个关于系数的线性表来表示:
P = ( p0, p1, …, pn )
但是对于形如
相关文档
最新文档