1、#include#includeusing namespace std;/多项式节点的定义 struct Termfloat coef; / 系数 int exp; / 指数 Term * link;Term(float c,int e,Term *next=NULL)coef=c;exp=e;link=next;Term* InsertAfter(float c,int e);friend ostream /重载运算符 friend Polynomial operator + (Polynomial /重载运算符+ friend Polynomial operator * (Polynomi
2、al /重载运算符* ;/在当前由 this 指针指示的项后面插入一个新项 Term* Term:InsertAfter(float c,int e)link=new Term(c,e,link); /创建一个新节点,自动链接 return link; / 插入到 this 后面 / Term 的友元函数,输出一个节点 x 的内容到输出流 out 中 ostreamwhile(srcptr!=NULL)destptr-InsertAfter(srcptr-coef,srcptr-exp);srcptr=srcptr-link;destptr=destptr-link;/计算最大阶数,当多项式按
3、升序排列时,最后一项是指数最大的 int Polynomial:maxOrder()Term* current=first;while(current-link!=NULL)current=current-link;return current-exp;/Polynomial 类的友元函数,从输入流 in 输入各项,用尾插法建立一个多项式 istream / rear 是尾指针 int c,e;while(1)coutce;if(eInsertAfter(c,e);return in;/Polynomial 类的友元函数:输出带 附加头结点的多项式链表 x ostreamcoutcoef0)o
4、utlink;outlink;pb=B.getHead()-link;while(pa!=NULLif(fabs(temp)0.001)pc=pc-InsertAfter(temp,pa-exp); /系数相加后不为零,将结果保存 pa=pa-link;pb=pb-link;else if(pa-expexp)pc=pc-InsertAfter(pa-coef,pa-exp);pa=pa-link;elsepc=pc-InsertAfter(pb-coef,pb-exp);pb=pb-link;if(pa!=NULL)p=pa;elsep=pb;while(p!=NULL) /处理链剩余部分
5、pc=pc-InsertAfter(p-coef,p-exp);p=p-link;return C;/Polynomial 类的友元函数:将一元多项式 A 和 B 相乘,乘积用带附加头结点的单链表存储/返回值为指向存储乘积多项式的单链表的头指针 Polynomial operator * (Polynomial int AL,BL,i,k,maxExp;Polynomial C; /结果多项式 pc=C.getHead();AL=A.maxOrder();BL=B.maxOrder();if(AL!=-1|BL!=-1)maxExp=AL+BL;float *result=new floatm
6、axExp+1;for(i=0;ilink;while(pa!=NULL)pb=B.getHead()-link;while(pb!=NULL)k=pa-exp+pb-exp;resultk=resultk+pa-coef*pb-coef;pb=pb-link;pa=pa-link;for(i=0;i0.001)pc=pc-InsertAfter(resulti,i);delete result;pc-link=NULL;return C;int main()Polynomial A,B,C;coutA;coutB;C=A+B;cout“A+B 为: “Cendl;C=A*B;cout“A*B 为: “Cendl;system(“pause“);return 0;