//* written by zhangge 2009.10.13 *// //*modify by zhangge 2009 12.14*// #include"iostream.h" #include"stdlib.h" class poly; class node//定义节点类 { friend class poly; private: int exp; double ceof; node *next; public: node(node *p=NULL) { next=p; } node(int a,double b,node *p=NULL) { exp=a;//指数 ceof=b;//系数 next=p;//链 } }; class poly { private: node *head; public: poly() { head=new node(); } void insert(int a,double b)//插入操作 { node *p=new node(a,b); node *q; q=head; while(q->next!=NULL) q=q->next; q->next=p; p->next=NULL; } void clearn()//clearn操作 { head->next=NULL; /*node *p,*t; p=head->next; head->next=NULL; while(p!=NULL) { t=p; p=p->next; delete t; }*/ } void polyadd(poly po) { node *m,*n,*t,*k; k=head; //它用来指向m前一节点。以后定位用到。 m=head->next; n=po.head->next; while(m!=NULL&&n!=NULL) { if(m->exp<n->exp) { k=k->next; m=m->next; } else if(m->exp==n->exp) { m->ceof+=n->ceof; if(m->ceof!=0) { k=k->next; m=m->next; n=n->next; } else { t=m; m=m->next;//这里要先于delete k->next=m;//k要链上去。 delete t; n=n->next; } } else { t=n; n=n->next;//这里注意循序,这个必须在这里,要不下面的操作将影响它。 t->next=k->next; k->next=t; k=k->next; } } if(n!=NULL)//若po还有数据,就链上去 k->next=n; } void polymulty(poly po) { node *m,*n; poly p2; m=head->next; head->next=NULL;//这里把其置空。 n=po.head->next; while(n!=NULL) { insert(m->exp+n->exp,m->ceof*n->ceof); n=n->next; } while(m->next!=NULL)//这里的判断条件注意不是m!=NULL { n=po.head->next; m=m->next; while(n!=NULL) { p2.insert(m->exp+n->exp,m->ceof*n->ceof); n=n->next; } polyadd(p2); p2.clearn();//这里要清空 } } void print()//打印 { node *p; p=head->next; if(p==NULL) cout<<0; else while(p!=NULL) { cout<<p->ceof<<"X"<<"^"<<p->exp<<" "; p=p->next; } cout<<endl; } }; void main() { poly p1,p2; int n,i,a,k; double b; loop: cout<<"依次输入多项式的系数 (格式:系数,指数 按递增)"<<endl; cout<<" 请输入第一个多项式的长度"<<endl; cin>>n; cout<<"输入多项式"<<endl; for(i=0;i<n;i++) { cin>>b>>a; p1.insert(a,b); } cout<<"请输入第二个多项式的长度"<<endl; cin>>n; cout<<"输入多项式"<<endl; for(i=0;i<n;i++) { cin>>b>>a; p2.insert(a,b); } cout<<"你想进行的计算"<<endl; cout<<"1:加法"<<endl; cout<<"2:乘法"<<endl; cin>>k; if(k==1) { p1.print(); p2.print(); p1.polyadd(p2); p1.print(); p1.clearn(); p2.clearn(); } else { p1.print(); p2.print(); p1.polymulty(p2); p1.print(); p1.clearn(); p2.clearn(); } cout<<"继续选1"<<endl; cin>>k; if(k==1) goto loop; else exit(0); }