一元多项式的加减乘运算
2017-02-10 14:53
405 查看
Polyn.h //-----------------------------------------------------------------------------------------------头文件
Polyn.cpp //-----------------------------------------------------源文件
PolynMain.cpp //-----------------------------------------------Main源文件
#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) return 0; else if(pa!=NULL && pb==NULL) return 1; else if(pa==NULL && pb!=NULL) return -1; { if(pa->expn > pb->expn) 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 { if(pn == NULL) { pn = s; return; } PolynNode *p = pn; PolynNode *q = NULL; while(p!=NULL && p->expn>s->expn) { q = p; p = p->link; } if(p!=NULL && p->expn < s->expn) { if(q==NULL) { s->link = p; pn = s; } 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 & 4000 amp;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; } cout<<endl; } Polyn PolynAdd(Polyn pa, Polyn pb) { if(pa==NULL && 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: s->coef = pa->coef; s->expn = pa->expn; pa = pa->link; break; case 0: s->coef = pa->coef + pb->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; }
PolynMain.cpp //-----------------------------------------------Main源文件
#include"Polyn.h" int _Compare(Polyn pa, Polyn pb) { if(pa==NULL && pb==NULL) return 0; else if(pa!=NULL && pb==NULL) return 1; else if(pa==NULL && pb!=NULL) return -1; { if(pa->expn > pb->expn) 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 { if(pn == NULL) { pn = s; return; } PolynNode *p = pn; PolynNode *q = NULL; while(p!=NULL && p->expn>s->expn) { q = p; p = p->link; } if(p!=NULL && p->expn < s->expn) { if(q==NULL) { s->link = p; pn = s; } 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; } cout<<endl; } Polyn PolynAdd(Polyn pa, Polyn pb) { if(pa==NULL && 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: s->coef = pa->coef; s->expn = pa->expn; pa = pa->link; break; case 0: s->coef = pa->coef + pb->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; }
相关文章推荐
- 一元多项式的表示及加减乘法运算
- c语言链表实现一元多项式的加减乘运算
- C语言实现一元多项式的加减运算
- 一元多项式的加减乘运算
- 一元多项式加减乘求导微分简单运算
- c语言数据结构之实现一元多项式的加减运算
- 数据结构之一元多项式运算操作5-(加,减,乘,化简)
- 数据结构 PAT 02-线性结构1 一元多项式的乘法与加法运算
- 线性结构2 一元多项式的乘法与加法运算
- PAT 一元多项式的乘法与加法运算(20)(模拟计算过程)
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (java)
- PTA 02-线性结构2 一元多项式的乘法与加法运算
- 链表及其应用3————一元多项式的运算
- 网易云课堂-陈越、何钦铭-数据结构-2016春,02-线性结构1 一元多项式的乘法与加法运算,学习笔记
- PTA一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- 7-1(链表) 一元多项式的乘法与加法运算(20 point(s))
- 6.7 一元多项式的运算
- 【4C练习题】一元多项式的乘法与加法运算(20 分)