多项式基本操作的实现

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值