チェーンは多項式の相乗を実現します.

15141 ワード

チェーンは多項式の相乗を実現します.
データ構造を初めて勉強しました.私はこの初心者で、教程を見ていませんでした. 
コードを先に入れて、コードにコメントがあります.コメントをcoutに変えてもいいです.
後で詳しい補足説明をします.
問題の説明:
2つの多項式を入力して、多項式の一番目の数は項数です.その後は2つのペア、1つの係数、1つの指数、多項式の順序によって、係数の降順になります.1つの鎖の表で2つの多項式の相乗を実現します.
チェーンで実現します.
解決策:
最初は二つの多項式の第一項を貯金します.これは結果多項式の第一項です.順序が整いましたので、後にはこの項目の指数が大きくないので、この項目の本位を考慮しなくてもいいです.その後はチェーン表の各項目、三つの基本過程を通して、本位を足して、前に挿入して、後ろに挿入します.実現しました.二つの多項式が乗ります.この新たに構築されたチェーンは結果多項式です.
上のコード:
  1 #include
  2 #define ends " ";  //linux ends   
  3 using namespace std;
  4 
  5 typedef struct polynomial
  6 {
  7     int coef; //    
  8     int index; //  
  9     polynomial * next;
 10 }term,*pTerm;
 11 
 12 pTerm creatterm();
 13 void showterm(pTerm);
 14 pTerm mult(pTerm,pTerm);
 15 
 16 int main(){
 17     pTerm term1,term2,termAns;
 18     term1=creatterm();
 19     term2=creatterm();
 20     cout<<""<<endl;
 21     showterm(term1);
 22     showterm(term2);
 23     cout<<""<<endl;
 24     termAns=mult(term1,term2);
 25     showterm(termAns);
 26     return 0;
 27 }
 28 //     
 29 pTerm creatterm(){
 30     int val,m,c,f;
 31     pTerm phead, ptail;
 32     phead = (pTerm)malloc(sizeof(term));
 33     ptail=phead;
 34     ptail->next=NULL;
 35     cout<<"";
 36     cin>>m;
 37     for(int i=0;i){
 38         cin>>c>>f;
 39         pTerm pnew=(pTerm)malloc(sizeof(term));
 40         pnew->coef=c;
 41         pnew->index=f;
 42         ptail->next=pnew;
 43         pnew->next=NULL;
 44         ptail=pnew;
 45     }
 46     phead->coef=m;
 47     return phead;
 48 }
 49 //       
 50 void showterm(pTerm phead){
 51     pTerm p;
 52     p=phead->next;
 53     while(p!=NULL){
 54         cout<coef <<" "<< p->index<<" ";
 55         p=p->next;
 56     }
 57     cout<<endl;
 58 }
 59 //     
 60 pTerm mult(pTerm t1,pTerm t2){
 61     pTerm p1,p2,p,pre,phead;//                           p        
 62     int n=1;               //  
 63     //    
 64     p=(pTerm)malloc(sizeof(term));
 65     pre=(pTerm)malloc(sizeof(term));
 66     phead=(pTerm)malloc(sizeof(term));
 67     p1=t1->next;  //          
 68     p2=t2->next;  //          
 69     //p       
 70     p->coef=p1->coef*p2->coef;
 71     p->index=p1->index+p2->index;
 72     p->next=NULL;
 73     pre->next=p;
 74     phead->next=p;
 75     //         
 76     while(p1!=NULL){
 77         p2=t2->next;
 78         while(p2!=NULL){
 79            p=phead->next;
 80            pTerm pnew=(pTerm)malloc(sizeof(term));
 81            pnew->coef=p1->coef*p2->coef;
 82            pnew->index=p1->index+p2->index;
 83            pnew->next=NULL;
 84            for(int i=0;icoef*t2->coef;i++)
 85             {
 86                 if(p->index==pnew->index){ //    
 87                     if(n==1) break;  //           
 88                     else{p->coef+=pnew->coef;
 89                     n++;
 90                     break;}
 91                 }else if(p->index>pnew->index){
 92                     pre=p;
 93                     if(p->next==NULL) {  //    
 94                         p->next=pnew;
 95                         n++;
 96                         break;
 97                     }
 98                     else p=p->next;
 99                 }else if(p->indexindex) { //    
100                     pre->next=pnew;
101                     pnew->next=p;
102                     pre=pnew;
103                     n++;
104                     break;
105                 } 
106             }
107             p2=p2->next;  //p2  
108         }
109         p1=p1->next;    //p1  
110     }
111     cout<" ";  //    
112     return phead;
113 }
 
転載先:https://www.cnblogs.com/Cherrison-Time/p/10578408.html