您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验:一元多项式的运算

2014-12-04 22:18 141 查看
#include<iostream.h>

class Term

{

public:

Term(int c,int e):coef(c),exp(e)

{

link=0;

}

Term(int c,int e,Term *nxt):coef(c),exp(e)

{

link=nxt;

}

Term* InsertAfter(int c,int e)

{

link=new Term(c,e,link);

return link;

}

private:

int coef;

int exp;

Term *link;

friend ostream & operator << (ostream &,const Term &);

friend class Polynominal;

};

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;

}

class Polynominal

{

public:

Polynominal()

{

theList=new Term(0,-1);

theList->link=theList;

}

~Polynominal()

{

Term *p=theList->link;

while(p!=theList)

{

theList->link=p->link;

delete p;

p=theList->link;

}

delete theList;

}

void AddTerms(istream &in)

{

Term *q=theList;

int c,e;

for(;;)

{

cout<<"Input a term(coef,exp):\n"<<endl;

cin>>c>>e;

if(e<0) break;

q=q->InsertAfter(c,e);

}

}

void Output(ostream &out)const

{

int first=1;

Term *p=theList->link;

cout<<"The polynominal is:\n"<<endl;

for(;p!=theList;p=p->link)

{

if(!first&&(p->coef>0)) out<<"+";

first=0;

out<<*p;

}

cout<<"\n"<<endl;

}

void 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;

}

}

private:

Term *theList;

friend ostream & operator << (ostream &,const Polynominal &);

friend istream & operator >> (istream &,Polynominal &);

friend Polynominal & operator + (Polynominal &,Polynominal &);

};

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)

{

a.PolyAdd(b);

return a;

}

void main()

{

Polynominal q,p;

cin>>p;cout<<p;

cin>>q;cout<<q;

q=q+p;

cout<<q;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: