怎样自定义抽象数据类型实现多项式的加法?
我是C语言新手,近日老师发了一道上机题:
自定义抽象数据类型,用以实现多项式的相加运算。要求用链式存储结构。
请大家帮忙!!!
问题点数:11、回复次数:4Top
1 楼szws(克米帅)回复于 2005-04-01 21:02:52 得分 11
用类做的,不知你们学了没有
#include<iostream.h>
class Term
{
public:
Term(int c,int e);
Term(int c,int e,Term* nxt);
Term* InsertAfter(int c,int e);
private:
int coef;
int exp;
Term *link;
friend ostream &operator<<(ostream&,const Term&);
friend class Polynominal;
};
Term::Term(int c,int e):coef(c),exp(e)
{
link=0;
}
Term::Term(int c,int e,Term* nxt):coef(c),exp(e)
{
link=nxt;
}
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;
}
class Polynominal
{
public:
Polynominal();
void AddTerm(istream & in);
void Output(ostream & out)const;
void PolyAdd(Polynominal& r);
private:
Term * theList;
friend ostream &operator<<(ostream &,const Polynominal &);
friend istream& operator>>(istream &,Polynominal &);
friend Polynominal operator+(Polynominal &,Polynominal &);
};
Polynominal::Polynominal()
{
theList=new Term(0,-1);
theList->link=theList;
}
void Polynominal::AddTerm(istream &in)
{
Term * q=theList;
int c,e;
for(;;)
{
cout<<"Input a term(coef,exp):\n"<<endl;
in>>c>>e;
if(e<0)break;
q=q->InsertAfter(c,e);
}
}
void Polynominal::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 Polynominal::PolyAdd(Polynominal & r)
{
Term *q,*q1=theList,*q2,*p;
p=r.theList;
q=q1->link;p=p->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)
{
q2=q;q1->link=q->link;
q=q->link;delete(q2);
p=p->link;
}
else
{
q1=q;q=q->link;p=p->link;
}
}
else
{
q1=q->InsertAfter(p->coef,p->exp);
p=p->link;
}
}
}
ostream&operator<<(ostream &out,const Polynominal &x)
{
x.Output(out);
return out;
}
istream&operator>>(istream &in, Polynominal &x)
{
x.AddTerm(in);
return in;
}
Polynominal operator +(Polynominal &a,Polynominal &b)
{
a.PolyAdd(b);
return a;
}
void main()
{
Polynominal p,q;
cin>>p;cout<<p;
cin>>q;cout<<q;
q=q+p;cout<<q;
}Top
2 楼tgz501(长夜雨亭)回复于 2005-04-02 17:40:26 得分 0
上面的不是C语言把,不要找点东西就向上粘
typedef struct a
{
....数据
struct a *next;
}data;
main()
{
data a;
a = (data *)malloc(sizeof(data));
然后多定义几个,可以进行运算
}Top
3 楼szws(克米帅)回复于 2005-04-02 19:52:44 得分 0
这个绝对是我自己写的,从电脑里找出来的
而且我说明了是用类写的,当然不是用c写的,难道c里有“类”???
其实有了思想,用什么写都一样Top
4 楼youwuxian1213(冬瓜)回复于 2005-04-04 08:53:57 得分 0
高手,可是我们没有学习类啊!!!!
我看不懂啊!!!!
Top




