一元多项式的加减乘运算
2017-05-20 17:09
253 查看
//............polyn.h #ifndef _POLYN_H #define _POLYN_H #include<iostream> #include<assert.h> using namespace std; typedef struct PolynNode { float coef; int expn; struct PolynNode *link; }PolynNode; typedef PolynNode* Polyn; int _Compare(Polyn pa,Polyn pb); void _insert(Polyn &pn, PolynNode *s); void InitPolyn(Polyn &pn); void CreatePolyn(Polyn &pn, int m); void ShowPolyn(Polyn pn); Polyn PolynAdd(Polyn pa, Polyn pb); Polyn PolynSub(Polyn pa, Polyn pb); Polyn PolynMul(Polyn pa, Polyn pb); #endif //...........Polyn.cpp #include"Polyn.h" int _Compare(Polyn pa,Polyn pb) //比较函数 { if(pa==NULL&&pb==NULL) //两者相等 返回0 return 0; else if(pa!=NULL&&pb==NULL) //pa比pb大,返回1 return 1; else if(pa==NULL&&pb!=NULL) return -1; { //两者都不空的情况下比较指数 if(pa->expn >pb->expn ) //pa的指数大于Pb的指数 return 1; else if(pa->expn ==pb->expn ) return 0; else return -1; } } void _insert(Polyn &pn, PolynNode *s) //将多项式按指数幂大小排序 { if(s->coef == 0) { free(s); s = NULL; } else //如果系数不为0 { if(pn == NULL) { pn = s; return; } PolynNode *p = pn; PolynNode *q = NULL; while(p!=NULL && p->expn>s->expn) { q = p; //p往后走 p = p->link; } if(p !=NULL&&p->expn <s->expn ) // { if(q==NULL) { s->link = p; pn=s; //pn是整个多项式的头结点 } else { s->link =p; q->link =s; } } else if(p!=NULL && p->expn == s->expn) { p->coef += s->coef; if(p->coef == 0) { q->link = p->link; free(p); } free(s); s = NULL; } else { q->link = s; } } } void InitPolyn(Polyn &pn) { pn = NULL; } void CreatePolyn(Polyn &pn,int m) { for(int i=1; i<=m; ++i) { PolynNode *s = (PolynNode*)malloc(sizeof(PolynNode)); assert(s != NULL); s->link = NULL; cout<<"请输入第"<<i<<"项的系数和指数:>"; cin>>s->coef>>s->expn; _insert(pn, s); } } void ShowPolyn(Polyn pn) { PolynNode *p = pn ; bool first=true; while(p != NULL) { if(p->coef >0&&!first) //不是第一个输出的,就输出+ { cout<<"+"; } if(p->expn >1) { cout<<p->coef <<"x^"<<p->expn ; } else if(p->expn ==1) { cout<<p->coef <<"x"; } else { cout<<p->coef ; } p = p->link; first=false; //之后first肯定不是第一个 } cout<<endl; } Polyn PolynAdd(Polyn pa, Polyn pb) { if(pa==NULL< cec5 span class="hljs-subst">&&pb==NULL) return NULL; if(pa!=NULL&&pb==NULL) return pa; else if(pa==NULL&&pb!=NULL) return pb; Polyn pn=NULL; while(pa!=NULL||pb!=NULL) //当两个多项式都不为空的时候 { PolynNode *s=(PolynNode*)malloc(sizeof(PolynNode)); //申请结点 assert(s!=NULL); s->link=NULL; int res=_Compare(pa,pb); switch(res) { case 1: //pa比pb大 s->coef =pa->coef ; s->expn =pa->expn ; pa=pa->link ; //pa往后走 break; case 0: s->coef =pa->coef +pa->coef ; s->expn =pa->expn ; pa=pa->link ; pb=pb->link ; break; case -1: s->coef =pb->coef ; s->expn =pb->expn ; pb=pb->link ; break; } _insert(pn,s); //将值插入 } return pn; } Polyn PolynSub(Polyn pa, Polyn pb) // 多项式的减法运算 { Polyn pn=NULL; PolynNode *p=pb; while(p!=NULL) { p->coef *=-1; p=p->link ; } pn=PolynAdd(pa,pb); p=pb; while(p!=NULL) { p->coef *=-1; p=p->link ; } return pn; } Polyn PolynMul(Polyn pa, Polyn pb) //多项式的乘法 { Polyn pn=NULL; PolynNode *p; while(pa!=NULL) { p==pb; while(p!=NULL) { PolynNode *s=(PolynNode*)malloc(sizeof(PolynNode)); assert(s!=NULL); s->link =NULL; s->coef =pa->coef *p->coef ; s->expn =pa->expn +p->expn ; _insert(pn,s); p=p->link ; } pa=pa->link ; } return pn; } //.........main.cpp #include<iostream> #include"Polyn.h" using namespace std; void main() { Polyn pa; Polyn pb; Polyn pc; InitPolyn(pa); InitPolyn(pb); InitPolyn(pc); int m; int select = 1; while(select) { cout<<"***********************************"<<endl; cout<<"*[1]创建多项式pa [2]创建多项式pb *"<<endl; cout<<"*[3]显示多项式pa [4]显示多项式pb *"<<endl; cout<<"*[5]多项式相加 [6]多项式相减 *"<<endl; cout<<"*[7]多项式相乘 [0]退出系统 *"<<endl; cout<<"***********************************"<<endl; cout<<"请选择:>"; cin>>select; switch(select) { case 1: cout<<"请输入多项式的项数:>"; cin>>m; CreatePolyn(pa, m); break; case 2: cout<<"请输入多项式的项数:>"; cin>>m; CreatePolyn(pb, m); break; case 3: cout<<"pa = "; ShowPolyn(pa); cout<<endl; break; case 4: cout<<"pb="; ShowPolyn(pb); cout<<endl; break; case 5: pc = PolynAdd(pa, pb); cout<<"pc="; ShowPolyn(pc); break; } } }
相关文章推荐
- c语言链表实现一元多项式的加减乘运算
- 一元多项式的表示及加减乘法运算
- C语言实现一元多项式的加减运算
- 一元多项式加减乘求导微分简单运算
- 一元多项式的加减乘运算
- c语言数据结构之实现一元多项式的加减运算
- 5-2 一元多项式的乘法与加法运算 (20分)
- 02-线性结构2 一元多项式的乘法与加法运算 (20分)
- 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算 -数据结构
- PTA--一元多项式的乘法与加法运算
- 一元多项式的运算
- 一元稀疏多项式加减
- MyMathLib系列(一元多项式运算求初等因子等)
- 一元多项式加法与乘法运算链表实现
- 一元多项式加减
- 02-线性结构1 一元多项式的乘法与加法运算[网易云课堂-数据结构]
- 一元多项式乘法字符运算(关联容器map)
- java单链表实现一元多项式加法和乘法运算
- 二元多项式基本运算 选择合适的存储结构表示二元多项式,并实现基本的加减运算 要求: 1)二元多项式的输入采用如下方式进行键盘输入 (5y^2+7)x^4 + (3y^4+2y+9)x^2 + (2y