本文共 3136 字,大约阅读时间需要 10 分钟。
exp是指数,info是系数,输入0 0一个多项式结束。
#include #include #include template class Listob{ public: Listob() { info=0; next=NULL; prior=NULL; } Listob(TData c,TData d) { info=c; exp=d; next=NULL; prior=NULL; } friend void operator>>(istream &stream,Listob &o); TData info,exp; Listob *next; Listob *prior;};template void operator>>(istream &stream,Listob &o){ cout<<"Enter information:"; stream >>o.exp>>o.info;}template class List :public Listob { public: List() {start=end=NULL;} void store(Listob ); void remove(Listob *ob); void frwdlist(); Listob *find(TData c); Listob *getstart() { return start;} Listob *getend() { return end;} void setstart(Listob *p) { start=p;} void setend(Listob *p) {end=p;} static void add(List &,List ); static void sort(List &); static void copy(List &,List ); private: Listob *start,*end;};template void List ::store(Listob f){ Listob *p; p=new Listob ; if(!p) { cout<<"Allocation error./n"; exit(1); } p->info=f.info; p->exp=f.exp; if(start==NULL) end=start=p; else { p->prior=end; end->next=p; end=p; }}template void List ::remove(Listob *ob){ if(ob->prior) { ob->prior->next=ob->next; if(ob->next) ob->next->prior=ob->prior; else end=ob->prior; } else { if(ob->next) { ob->next->prior=NULL; start=ob->next; } else start=end=NULL; }}template void List ::frwdlist(){ if(start==NULL) { cout<<"empty list/n";} Listob *temp; temp=start; while(temp) { cout< exp<<","< info<<" "; temp=temp->next; } cout<}template void List ::add(List &list1,List list2){ Listob *p ,*q,*temp,*u; p=list1.getstart();q=list2.getstart(); if(!p) {List ::copy(list1,list2); return;} int flag; while(p&&q) { if(p->exp exp) flag=1; if(p->exp==q->exp) flag=2; if(p->exp>q->exp) flag=3; switch(flag) { case 1: { temp=p; p=p->next; } break ; case 2: { p->info+=q->info; if(!p->info) { list1.remove(p); } else temp=p; p=p->next; q=q->next; } break; case 3: { if(p->prior) { u=q->next; p->prior->next=q; p->prior->next->prior=p->prior; p->prior->next->next=p; p->prior=q; } else { u=q->next; list1.setstart(q); list1.getstart()->next=p; list1.getstart()->prior=NULL; p->prior=list1.getstart(); } q=u; } break; } } if(q) {temp->next=q;q->prior=temp;}}template void List ::copy( List &list1,List list2){ Listob *p; list1.setstart(NULL); p=list2.getstart(); while(p) { list1.store(*p); p=p->next; }}template void List :: sort(List &list){ TData temp; Listob *p,*q; p=list.getstart(); while(p) { q=p; while(q->next) { if(q->next->exp exp) { temp=q->next->exp; q->next->exp=p->exp; p->exp=temp; temp=q->next->info; q->next->info=p->info; p->info=temp; } q=q->next; } p=p->next; }}void main(){ List list1,list2,list2save,listanswer; Listob f ,*p,*q; cin>>f; while(f.info!=0) { list1.store(f); cin>>f; } List ::sort(list1); list1.frwdlist(); cin>>f; while(f.info!=0) { list2.store(f); cin>>f; } List ::sort(list2); List ::copy(list2save,list2); list2.frwdlist(); p=list1.getstart(); q=list2.getstart(); if(p&&q) { while(p) { while(q) { q->exp+=p->exp; q->info*=p->info; q=q->next; } List ::add(listanswer,list2); List ::copy(list2,list2save); q=list2.getstart(); p=p->next; } listanswer.frwdlist(); } else cout<<"empty list/n";}
转载地址:http://ccmli.baihongyu.com/