多项式的相加 A(x)=∑ax B(x)=∑bx° j=0 C(X=A(X)+B(X) A. Start a finish free MaxTerm-1 B. Start B. finish 2021220 26
2021/2/20 26 多项式的相加 A(x)=Σaix B(x)=Σbjx C(x)=A(x)+B(x) n m i=0 j=0 e i e j A . Start A . finish B . Start B . finish free MaxTerm-1
多项式A+B算法思路: (1)保留A、B两个多项式,将A+B放人C中; (2)开始时C. start=free; (3)设置两个指针a和b分别作为A与B的检测指针,开始时 分别指向A与B的首项,即 a=A. start b=b. start (4)当两个指针都未超出相应多项式的最未位置时,比较它们所 指示的对应项的指数: 若指数相等,则对应项系数相加,若相加结果不为零,则在 C中加入一个新项 若指数不等,则把指数小\者拷贝到C中 (5)当两个指针中有一个超出了相应多项式的最未位置,则将另 个多项式的剩余部分拷贝到C中 2021220
2021/2/20 27 多项式A+B算法思路: (1)保留A、B两个多项式,将A+B放人C中; (2)开始时C.start = free; (3)设置两个指针a 和 b 分别作为A 与 B 的检测指针,开始时 分别指向A 与 B 的首项,即: a = A . start ; b = B . start; (4)当两个指针都未超出相应多项式的最末位置时,比较它们所 指示的对应项的指数: 若指数相等,则对应项系数相加,若相加结果不为零,则在 C 中加入一个新项 若指数不等,则把指数小者拷贝到C 中 (5)当两个指针中有一个超出了相应多项式的最末位置,则将另 一个多项式的剩余部分拷贝到C 中
Polynomial Polynomial: Add( polynomial b)i Polynomial C; int a=start; int b=B start; C start= free; float c while( a<=finish &&b<=B finish switch( compare(termArrayla] exp, termArray[b]. exp))& case"=: c=termArrayla] coef+ termArray[b). coef; if(c)New Term( c, termArrayla]exp a b++. break case New Term( term Array[b].coef, termArray[b]. exp) b++. break case"<: New Term( termArrayla] coef, term[a]. exp); a++ for(, a<=finish; a++) New Term( termArrayla] coef, termArrayla] exp); for(, b<=B finish; b++ New Term( termArray[b]. coef, termArray[b]. exp); C finish=free-1 return C,j 2021220 28
2021/2/20 28 Polynomial Polynomial :: Add ( Polynomial B ) { Polynomial C; int a = start; int b =B.start; C.start = free; float c; while ( a <= finish && b <= B.finish ) switch ( compare(termArray[a].exp , termArray[b].exp )) { case ‘=‘ : c= termArray[a].coef + termArray[b].coef ; if (c) NewTerm( c , termArray[a].exp ) ; a++ ; b++ ; break ; case ‘>‘ : NewTerm( termArray[b].coef , termArray[b].exp); b++ ; break ; case ‘<’ : NewTerm( termArray[a].coef , termArray[a].exp); a++ ; } for ( ; a <= finish ; a++ ) NewTerm( termArray[a].coef , termArray[a].exp); for ( ; b <= B.finish ; b++ ) NewTerm( termArray[b].coef , termArray[b].exp); C.finish=free-1; return C ; }
void Polynomial: New Term( float c, int e) ∥把一个新的项(二元组<c,e>)追加到多项式C(x)中 if free >= MaxTerms cout<< Too many terms in polynomials << endl return termArrayl free ] coef=c termArrayI free exp free ++ 2021220 29
2021/2/20 29 void Polynomial :: NewTerm( float c , int e ) // 把一个新的项(二元组< c , e >)追加到多项式C(x) 中 { if ( free >= MaxTerms ) { cout << “Too many terms in polynomials” << endl ; return ; } termArray[ free ] . coef = c ; termArray[ free ] . exp = e ; free ++ ; }
作业 定义多项式类的求表长、查找、插入、删除、判空 表判满表、读取(第i个元素)等成员函数,并用这些 函数实现前述的两个多项式的相加操作 提示 (1)定义查找指数相等的元素的成员函数 (2)伤照前述的顺序表合并操作算法,先从多项式B中 读取一元素,在A中查找有无指数相等元素 若无,则有序插入A中 若有,则系数相加: 若和为零,则从A中删除相应元素 否则用新系数构造新元素,并插入A中相应位置 2021220
2021/2/20 30 作业: 定义多项式类的求表长、查找、插入、删除、判空 表判满表、读取(第 i 个元素)等成员函数,并用这些 函数实现前述的两个多项式的相加操作。 提示: (1)定义查找指数相等的元素的成员函数 (2)仿照前述的顺序表合并操作算法,先从多项式 B 中 读取一元素,在 A 中查找有无指数相等元素: 若无,则有序插入 A 中; 若有,则系数相加: 若和为零,则从 A 中删除相应元素; 否则用新系数构造新元素,并插入 A 中相应位置