永发信息网

多项式的计算(单项链表的应用c++)

答案:2  悬赏:70  手机版
解决时间 2021-04-26 14:36
  • 提问者网友:我的未来我做主
  • 2021-04-26 08:16

设计要求:设计处理n次一元多项式P(x) = a0 + a1x + a2x2 + … + anxn,多项式实际上包含n+1项,由n+1个系数唯一确定。为了节省存储空间,只存储多项式中系数非0 的项。运用链表中的每一个结点存放多项式的一个系数非0项,它包含三个域,分别存放该项的系数、指数以及指向下一项结点的指针,来对其进行相应的处理(某一多项式根据x求值、多个同元多项式处理等等)。

最佳答案
  • 五星知识达人网友:天凉才是好个秋
  • 2021-04-26 09:22

http://www.cppblog.com/cxf20090520biancheng/archive/2010/04/14/112581.html


我的博客里有多项式的加法和乘法,减法和加法类似,除法有点困难,自己写吧,实在写不出来加我qq:1085124834


不知提问者问题解决了没有,若没解决,可加qq:1085124834


  

全部回答
  • 1楼网友:你可爱的野爹
  • 2021-04-26 10:32
ifndef POLYNOMINAL_CLASS #define POLYNOMINAL_CLASS #include<iostream> using namespace std; class Term { private:     int coef;     int exp;     Term* link; public:     Term(int c, int e);     Term(int c, int e, Term* nxt);     Term* InsertAfter(int c, int e);     friend ostream& operator<<(ostream &,const Term &);     friend class Polynominal; }; class Polynominal { public:     Polynominal(void);     ~Polynominal(void); private:     Term* thelist; public:     void AddTerms(istream& in);     void Output(ostream& out)const;     Polynominal& PolyAdd(Polynominal& r);     Polynominal& PolyMul(Polynominal& r);     Polynominal& operator=(Polynominal& r);     void PolyClear();     friend ostream& operator<<(ostream& out,const Polynominal& x);     friend istream& operator>>(istream& in, Polynominal& x);     friend Polynominal& operator + (Polynominal& a, Polynominal& b);     friend Polynominal& operator * (Polynominal& a, Polynominal& b); }; #endif//POLYNOMINAL_CLASS Term::Term(int c, int e) {     link=0; } Term::Term(int c, int e, Term* nex):coef(c),exp(e) {     link=nex; } Term* Term::InsertAfter(int c, int e) {     link=new Term(c,e,link);     return link; } ostream &operator <<(ostream& out,const Term& val) {     if(val.coef==0)     return out;     out<<val.coef;     switch(val.exp){     case 0:break;     case 1:out<<"x";break;     default:out<<"x^"<<val.exp;break;     }     return out; } Polynominal& Polynominal::operator=(Polynominal& r)  {     this->PolyClear();     Term* q=thelist->link,* p;     for(p=r.thelist->link;p->exp>=0;p=p->link)     q=q->InsertAfter(p->exp,p->coef);     return *this; } Polynominal::Polynominal(void) {     thelist=new Term(0,-1);     thelist->link=thelist; } Polynominal::~Polynominal(void) {     Term* p=thelist->link;     while(p!=thelist){     thelist->link=p->link;     delete p;     p=thelist->link;     }     delete thelist; } void Polynominal::PolyClear() {     Term* p=thelist->link;     while(p->exp>=0){     thelist->link=p->link;     delete p;     p=thelist->link;     } } void Polynominal::AddTerms(istream& in) {     Term* q=thelist;     int c,e;     for(;;)     {     cout<<"Input a term(coef,exp):";     cin>>c>>e;     if(e<0) break;     q=q->InsertAfter(c,e);     } } void Polynominal::Output(ostream& out)const {     int first=1;Term* p=thelist->link;     for(;p!=thelist;p=p->link)     {     if(!first&&(p->coef>0)) out<<"+";     first=0;     cout<<*p;     } } Polynominal& Polynominal::PolyAdd(Polynominal& r) {     Term *q,*q1=thelist,*p;     p=r.thelist->link;     q=q1->link;     while(p->exp>=0){     while(p->exp<q->exp){     q1=q;q=q->link;     }     if(p->exp==q->exp){     q->coef=q->coef+p->coef;     if(q->coef==0){     q1->link=q->link;     delete (q);     q=q1->link;     }     else{     q1=q;q=q->link;     }     }     else     q1=q1->InsertAfter(p->coef,p->exp);     p=p->link;     }     return *this; }  Polynominal& Polynominal::PolyMul(Polynominal& r) {     Term *q,*p;     Polynominal *temp=new Polynominal,*t=new Polynominal;Term* qq;     for(p=r.thelist->link;p->exp>=0;p=p->link)     {     for(q=thelist->link,qq=temp->thelist->link;q->exp>=0;q=q->link){     qq=qq->InsertAfter(q->coef*p->coef,p->exp+q->exp);     }     t->PolyAdd(*temp);     temp->PolyClear();     }     return *t; } ostream& operator<<(ostream& out,const Polynominal& x) {     x.Output(out);return out; } istream& operator>>(istream& in, Polynominal& x) {     x.AddTerms(in);return in; } Polynominal& operator + (Polynominal& a, Polynominal& b) {     return a.PolyAdd(b); } Polynominal& operator * (Polynominal& a, Polynominal& b) {     return a.PolyMul(b); } #include"Polynominal.h" #include<iostream> using namespace std; int main() {     Polynominal p,q,r;     cin>>p;     cin>>q;     cout<<"测试结果如下:"<<endl;     cout<<"p*q="<<p*q<<endl;     cout<<"p+q="<<p+q<<endl未}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯