设计要求:设计处理n次一元多项式P(x) = a0 + a1x + a2x2 + … + anxn,多项式实际上包含n+1项,由n+1个系数唯一确定。为了节省存储空间,只存储多项式中系数非0 的项。运用链表中的每一个结点存放多项式的一个系数非0项,它包含三个域,分别存放该项的系数、指数以及指向下一项结点的指针,来对其进行相应的处理(某一多项式根据x求值、多个同元多项式处理等等)。
多项式的计算(单项链表的应用c++)
答案:2 悬赏:70 手机版
解决时间 2021-04-26 14:36
- 提问者网友:我的未来我做主
- 2021-04-26 08:16
最佳答案
- 五星知识达人网友:天凉才是好个秋
- 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未}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯