zoukankan      html  css  js  c++  java
  • 多项式基本操作的实现

    2018-11-10-15:03:10

      1 /*********************************************
      2     完成多项式的输入输出,基本加减乘除法操作的实现。
      3     main函数操作:
      4         1.输入第一个多项式的项数。
      5         2.依次输入m项多项式的系数和指数。
      6         3.输出第一个多项式和它所包含的项数
      7         4.输入第二个多项式的项数。
      8         5.依次输入m项多项式的系数和指数。
      9         6.输出第二个多项式和他所包含的项数
     10         7.依次输出前两个多项式的和差积
     11         8.注意个多项式都是被先按照指数递增排序并化简再输出的
     12 **********************************************/
     13 #include <cstdio>
     14 #include <cstdlib>
     15 #include <iostream>
     16 using namespace std;
     17 typedef int Elemtype;
     18 
     19 typedef struct node{
     20     Elemtype coefficient;//系数
     21     Elemtype index;//指数
     22     struct node*Next;
     23 }Node,*LinkList;
     24 LinkList InitPolynomial();
     25 LinkList InsertElem(LinkList Head,Elemtype coefficient,Elemtype index);
     26 void DeleteElem(LinkList Head,LinkList End);
     27 int LengthofPolynomial(LinkList Head);
     28 LinkList AddPolynomial(LinkList Head1,LinkList Head2);
     29 LinkList SubtractionPolynomial(LinkList Head1,LinkList Head2);//Head1-Head2
     30 LinkList MultiplicationPolynomial(LinkList Head1,LinkList Head2);
     31 void SortPolynomial(LinkList&Head);//将多项式按照指数递增的形式排序,并且合并指数相同的项
     32 void PrintPolynomial(LinkList Head);
     33 void ChangeElem(Elemtype&elem1,Elemtype&elem2);
     34 //main函数内所有数据均为测试数据,读者可根据自己测试方式自行调换
     35 
     36 int main()
     37 {
     38     LinkList Head1=NULL,Head2=NULL,Add=NULL,Subtraction=NULL,Multiplication=NULL;
     39     Head1=InitPolynomial();
     40     cout<<"Head1:"<<endl;
     41     int m1,m2;
     42     Elemtype coefficient,index;
     43     cin>>m1;
     44     for(int i=0;i<m1;i++){
     45         cin>>coefficient>>index;
     46         InsertElem(Head1,coefficient,index);
     47     }
     48     SortPolynomial(Head1);
     49     PrintPolynomial(Head1);
     50     cout<<LengthofPolynomial(Head1)<<endl;
     51     Head2=InitPolynomial();
     52     cout<<"Head2:"<<endl;
     53     cin>>m2;
     54     for(int i=0;i<m2;i++){
     55         cin>>coefficient>>index;
     56         InsertElem(Head2,coefficient,index);
     57     }
     58     SortPolynomial(Head2);
     59     PrintPolynomial(Head2);
     60     cout<<LengthofPolynomial(Head2)<<endl;
     61     Add=AddPolynomial(Head1,Head2);
     62     SortPolynomial(Add);
     63     PrintPolynomial(Add);
     64     Subtraction=SubtractionPolynomial(Head1,Head2);
     65     SortPolynomial(Subtraction);
     66     PrintPolynomial(Subtraction);
     67     Multiplication=MultiplicationPolynomial(Head1,Head2);
     68     PrintPolynomial(Multiplication);//由于乘法后项数过多,所以先输出没有排序的结果。
     69     SortPolynomial(Multiplication);
     70     PrintPolynomial(Multiplication);
     71     return 0;
     72 }
     73 
     74 LinkList InitPolynomial(){
     75     LinkList Head;
     76     Head=(LinkList)malloc(sizeof(Node));
     77     Head->Next=NULL;
     78     Head->coefficient=0;
     79     Head->index=0;
     80     return Head;
     81 }
     82 
     83 LinkList InsertElem(LinkList Head,Elemtype coefficient,Elemtype index){
     84         if(Head->Next==NULL){
     85             LinkList q=(LinkList)malloc(sizeof(Node));
     86             Head->Next=q;
     87             q->coefficient=coefficient;
     88             q->index=index;
     89             q->Next=NULL;
     90         }
     91         else{
     92             LinkList p=NULL,q=NULL;
     93             for(q=Head->Next;q->Next;q=q->Next);
     94             p=(LinkList)malloc(sizeof(Node));
     95             q->Next=p;
     96             p->coefficient=coefficient;
     97             p->index=index;
     98             p->Next=NULL;
     99         }
    100     return Head;
    101 }
    102 
    103 void DeleteElem(LinkList Head,LinkList End){
    104     if(Head->Next==End){
    105         Head->Next=End->Next;
    106         free(End);
    107     }
    108     else if(End->Next!=NULL){
    109         LinkList q=NULL;
    110         for(q=Head->Next;q->Next!=End;q=q->Next);
    111         q->Next=q->Next->Next;
    112         free(End);
    113     }else{
    114         LinkList q=NULL;
    115         for(q=Head->Next;q->Next!=End;q=q->Next);
    116         q->Next=NULL;
    117         free(End);
    118     }
    119 }
    120 int LengthofPolynomial(LinkList Head){
    121     int length=0;
    122     LinkList q=NULL;
    123     for(q=Head->Next;q;q=q->Next)
    124         length++;
    125     return length;
    126 }
    127 
    128 void SortPolynomial(LinkList&Head){
    129     LinkList pir=NULL,end=NULL;
    130     for(pir=Head->Next;pir;pir=pir->Next)
    131         for(end=pir->Next;end;end=end->Next){
    132             if(pir->index>end->index){
    133                 ChangeElem(pir->index,end->index);
    134                 ChangeElem(pir->coefficient,end->coefficient);
    135             }
    136             if(pir->index==end->index){
    137                 pir->coefficient+=end->coefficient;
    138                 DeleteElem(Head,end);
    139             }
    140         }
    141 }
    142 
    143 LinkList AddPolynomial(LinkList Head1,LinkList Head2){
    144     LinkList pa=NULL,pb=NULL,Add=NULL;
    145     pa=Head1->Next;
    146     pb=Head2->Next;
    147     Add=InitPolynomial();
    148     while(pa&&pb){
    149         if(pa->index<pb->index){
    150             InsertElem(Add,pa->coefficient,pa->index);
    151             pa=pa->Next;
    152         }
    153         else if(pa->index>pb->index){
    154             InsertElem(Add,pb->coefficient,pb->index);
    155             pb=pb->Next;
    156         }
    157         else{
    158             InsertElem(Add,pa->coefficient+pb->coefficient,pa->index);
    159             pa=pa->Next;
    160             pb=pb->Next;
    161         }
    162     }
    163     if(pa)
    164         while(pa){
    165             InsertElem(Add,pa->coefficient,pa->index);
    166             pa=pa->Next;
    167         }
    168     if(pb)
    169         while(pb){
    170             InsertElem(Add,pb->coefficient,pb->index);
    171             pb=pb->Next;
    172         }
    173     return Add;
    174 }
    175 
    176 LinkList SubtractionPolynomial(LinkList Head1,LinkList Head2){
    177     LinkList pa=NULL,pb=NULL,Subtraction=NULL;
    178     pa=Head1->Next;
    179     pb=Head2->Next;
    180     Subtraction=InitPolynomial();
    181     while(pa&&pb){
    182         if(pa->index<pb->index){
    183             InsertElem(Subtraction,pa->coefficient,pa->index);
    184             pa=pa->Next;
    185         }
    186         else if(pa->index>pb->index){
    187             InsertElem(Subtraction,-pb->coefficient,pb->index);
    188             pb=pb->Next;
    189         }
    190         else{
    191             InsertElem(Subtraction,pa->coefficient-pb->coefficient,pa->index);
    192             pa=pa->Next;
    193             pb=pb->Next;
    194         }
    195     }
    196     if(pa)
    197         while(pa){
    198             InsertElem(Subtraction,pa->coefficient,pa->index);
    199             pa=pa->Next;
    200         }
    201     if(pb)
    202         while(pb){
    203             InsertElem(Subtraction,-pb->coefficient,pb->index);
    204             pb=pb->Next;
    205         }
    206     return Subtraction;
    207 }
    208 
    209 LinkList MultiplicationPolynomial(LinkList Head1,LinkList Head2){
    210     LinkList pa=NULL,pb=NULL,Multiplication=NULL;
    211     Multiplication=InitPolynomial();
    212     for(pa=Head1->Next;pa;pa=pa->Next)
    213         for(pb=Head2->Next;pb;pb=pb->Next)
    214             InsertElem(Multiplication,pa->coefficient*pb->coefficient,pa->index+pb->index);
    215     return Multiplication;
    216 }
    217 
    218 void ChangeElem(Elemtype&elem1,Elemtype&elem2){
    219     Elemtype medium=elem1;
    220     elem1=elem2;
    221     elem2=medium;
    222 }
    223 
    224 void PrintPolynomial(LinkList Head){
    225     int flag=0;
    226     LinkList p=NULL;
    227     cout<<"Y=";
    228     for(p=Head->Next;p;p=p->Next){
    229         if(p->coefficient>0){
    230             if(flag)   cout<<'+';
    231             if(p->coefficient==1){
    232                 flag=1;
    233                 cout<<'X'<<p->index;
    234             }
    235             else{
    236                 flag=1;
    237                 cout<<p->coefficient<<'X'<<p->index;
    238             }
    239         }
    240         else if(p->coefficient<0){
    241             if(p->coefficient==-1){
    242                 cout<<'-';
    243                 flag=1;
    244                 cout<<'X'<<p->index;
    245             }
    246             else{
    247                 flag=1;
    248                 cout<<p->coefficient<<'X'<<p->index;
    249             }
    250         }
    251         else
    252             continue;
    253     }
    254     if(!flag)
    255         cout<<'0';
    256     cout<<endl;
    257 }
    258 
    259 /****************************************
    260     Author:CRUEL_KING
    261     Time:2018/11/9
    262     Program name:多项式基本操作的实现.cpp
    263 ****************************************/
  • 相关阅读:
    第十一周课程总结
    第十周学习总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周总结&第五次实验报告
    第六周学习总结&第四次实验报告
    课程总结
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周
  • 原文地址:https://www.cnblogs.com/bianjunting/p/9939345.html
Copyright © 2011-2022 走看看