参考下列实例,改为单链多项式相加
#include <iostream>
using namespace std;
//定义结点类型
struct node
{
int exp;
double coef;
node *next;
};
//多项式循环链表类
class Poly
{
private:
node *head;
public:
Poly();
void in1_Poly();
void in2_Poly(int,int[],double[]);
void del_Poly();
void prt_Poly();
Poly operator + (Poly &);
Poly operator * (Poly &);
};
//构造函数,建立空多项式链表
Poly::Poly()
{
node *p;
p=new node;
p->exp=-1;
p->next=p;
head=p;
return;
}
//键盘输人多项式链表
void Poly::in1_Poly()
{
node *p,*k;
int e;
double c;
k=head;
cout<<"输入:系数<空格>指数。输人指数-1结束!"<<endl;
cin>>c>>e;
while(e>=0)
{
p=new node;
p->exp=e;
p->coef=c;
p->next=head;
k->next=p;
k=p;
cin>>c>>e;
}
return;
}
//由数组复制多项式链表
void Poly::in2_Poly(int n,int e[],double c[])
{
int k;
node *p;
for(k=n-1;k>=0;k--)
{
p=new node;
p->coef=c[k];
p->exp=e[k];
p->next=head->next;
head->next=p;
}
return;
}
//释放多项式链表
void Poly::del_Poly()
{
node *p,*q;
q=head->next;
while(q!=head)
{
p=q->next;
delete q;
q=p;
}
q->next=head;
return;
}
//输出多项式链表
void Poly::prt_Poly()
{
node *k;
if(head->next==head)
cout<<"空表"<<endl;
k=head->next;
while(k!=head)
{
cout<<"("<<k->coef<<","<<k->exp<<")"<<endl;
k=k->next;
}
return;
}
//多项式相加
Poly Poly::operator+(Poly &p2)
{
Poly p;
node *k,*q,*m,*n;
int e;
double c;
k=p.head;
m=head->next;
n=p2.head->next;
while((m->exp!=-1)||(n->exp!=-1))
{
if(m->exp==n->exp)
{
c=m->coef+n->coef;
e=m->exp;
m=m->next;
n=n->next;
}
else if(m->exp>n->exp)
{
c=m->coef;
e=m->exp;
m=m->next;
}
else
{
c=n->coef;
e=n->exp;
n=n->next;
}
if(c!=0)
{
q=new node;
q->exp=e;
q->coef=c;
q->next=p.head;
k->next=q;
k=q;
}
}
return(p);
}
//多项式相乘
Poly Poly::operator *(Poly &p2)
{
Poly p,p1,p3;
node*q,*k,*m,*n;
m=head->next;
while(m->exp!=-1)
{
p3=p;
k=p1.head;
n=p2.head->next;
while(n->exp!=-1)
{
q=new node;
q->exp=m->exp+n->exp;
q->coef=(m->coef)*(n->coef);
q->next=p1.head;
k->next=q;
n=n->next;
k=q;
}
p=p3+p1;
p1.del_Poly();
p3.del_Poly();
m=m->next;
}
return(p);
}