Node *q,*p; p=head;
while (p)//删除链表 {
q=p->next; if (p) delete p; p=q; }
head=NULL; }
Node* get(int e);//读取指数为e的项,返回其指针 void set(double c,int e);//设置指数为e的项的系数为c void Create(double *c,int *e,int n);//创建多项式
friend Polynominal operator +(Polynominal a,Polynominal b);//重载+运算符 friend Polynominal operator -(Polynominal a,Polynominal b);//重载-运算符 friend Polynominal operator *(Polynominal a,Polynominal b);//重载*运算符 friend ostream& operator<<(ostream& os, const Polynominal& a); Polynominal& operator =(Polynominal a);//重载=运算符 void Print(ostream& os = cout) const; void Copy(const Polynominal &a);
void Addr(){cout<<\链表头指针值为:\private:
Node *head;//链表头指针 };
在程序中,声明了个个运算符的重载,通过Node* get(int e);读取指数为e的项,返回其指针,通过void set(double c,int e)设置指数为e的项的系数为c,多项式的的系数、指数以及指针全部采用了动态内存分配技术,这些工作都是由构造函数和Create()函数完成,它们的清理工作在析构函数中完成。
4.2 类的实现
//类实现
#include
- 3 -
#include
int exp;//指数 double coef;//系数 Node *next; };
void Polynominal::Copy(const Polynominal &a) { //复制对象(公用函数) Node *t,*s,*p; p=a.head;s=head=0; while(p) {
t=new Node; if (head==0) head=t; t->coef=p->coef; t->exp=p->exp; p=p->next; if(s) s->next=t; s=t; }
if (s) s->next=0; }
Polynominal::Polynominal(const Polynominal& a)//复制构造函数 { Copy(a); }
void Polynominal::Create(double *c,int *e,int n)//创建多项式 { if (n<1)
cout<<\错误:要创建多项式的项数必须大于零。\\n\ else {
- 4 -
head=new Node;//创建头结点 head->coef=c[0]; head->exp=e[0]; Node *q,*p=head; for (int i=1;i q=new Node; q->coef=c[i]; q->exp=e[i]; p->next=q; p=q; } p->next=0; } } Node* Polynominal::get(int e)//读取指数为e的项 { Node *p=head; while (p) { if (p->exp==e) return p; p=p->next; } return p;//没有找到,返回空指针 } void Polynominal::set(double c,int e)//将指数为e系数为c的项加入多项式(原多项式无指数为e的项) { Node *q,*p,*t; t=new Node; t->coef=c; t->exp=e; if (head==0) { - 5 - head=t; head->next=0; return; } if (e>head->exp) { t->next=head; head=t;//插入头部 return; } p=head; while (p && e //新的项插入p所指结点前 t->next=p; q->next=t; } else//插入尾部 { q->next=t; t->next=0; } } Polynominal operator +(Polynominal a,Polynominal b)//重载+运算符 { Polynominal temp; Node *p,*q,*s,*t; double x; s=new Node;temp.head=s;//先增加一个头结点 - 6 - p=a.head; q=b.head; while (p && q) { if (p->exp==q->exp) { x=p->coef+q->coef; if (x!=0.0) { t=new Node; t->exp=p->exp; t->coef=x; s->next=t; s=t; } p=p->next; q=q->next; } else { t=new Node; if(p->exp>q->exp) { t->coef=p->coef; t->exp=p->exp; p=p->next; } else { t->coef=q->coef; t->exp=q->exp; q=q->next; } s->next=t; - 7 -