步骤:创建线性表,并对线性表进行排序,相加后的结果存放在Head1中。
#include <bits/stdc++.h>
using namespace std;
#define MAX 30
typedef struct
{
float coef;
int exp;
}PolyArray[MAX];
struct PolyNode
{
float coef;
int exp;
PolyNode *next;
};
void CreatePoly(PolyArray a,int n,PolyNode *Head)//尾插法
{
PolyNode *s,*r;
int i;
r=Head;
for(i=0;i<n;i++)
{
s=new PolyNode;
s->coef=a[i].coef;
s->exp=a[i].exp;
s->next=NULL;
r->next=s;
r=s;
}
}
void PolyAdd(PolyNode *Head1,PolyNode *&Head2)
{
float sum;
PolyNode *pa,*pb,*qa,*qb;
pa=Head1;
pb=Head2;
qa=pa->next;
qb=pb->next;
while(qa!=NULL&&qb!=NULL)
{
if(qa->exp>qb->exp)
{
pa=qa;
qa=qa->next;
}
else if(qa->exp<qb->exp)
{
pb->next=qb->next;
qb->next=qa;
pa->next=qb;
pa=qb;
qb=pb->next;
}
else
{
sum=qa->coef+qb->coef;
if(sum==0)
{
pa->next=qa->next;
delete qa;
qa=pa->next;
pb->next=qb->next;
delete qb;
qb=pb->next;
}
else
{
qa->coef=sum;
pa=qa;
qa=qa->next;
pb->next=qb->next;
delete qb;
qb=pb->next;
}
}
}
if(qb!=NULL)
{
PolyNode *r=new PolyNode;
r->coef=qb->coef;
r->exp=qb->exp;
pb->next=qb->next;
delete qb;
qb=pb->next;
}
}
void print(PolyNode *Head1)
{
PolyNode *pa;
pa=Head1->next;
while(pa!=NULL)
{
cout<<pa->coef<<' '<<pa->exp<<endl;
pa=pa->next;
}
}
void PolySort(PolyNode *Head)//降序排列
{
PolyNode *p,*q,*r;
p=Head->next;
if(p!=NULL)
{
r=p->next;
p->next=NULL;
p=r;
while(p!=NULL)
{
r=p->next;
q=Head;
while(q->next!=NULL&&q->next->exp>p->exp)
{
q=q->next;
}
p->next=q->next;
q->next=p;
p=r;
}
}
}
int main()
{
PolyNode *Head1=new PolyNode,*Head2=new PolyNode;//哨兵节点
PolyArray a={{9,8},{5,16},{3,1},{7,0}};
PolyArray b={{22,7},{-9,8},{8,1}};
CreatePoly(a,4,Head1);
CreatePoly(b,3,Head2);
PolySort(Head1);
PolySort(Head2);
PolyAdd(Head1,Head2);
print(Head1);
return 0;
}