void InitPolylist(Polylist L)
{
L = (Polylist)malloc(sizeof(Polynode));
L ->next=NULL;
}
Polylist CreatePolylist()
{
float xishu =1;
int zhishu = 0;
Polylist head,tail,p;
head = (Polylist)malloc(sizeof(Polynode));
head->next =NULL;
tail =head;
while(1){
p = (Polylist)malloc(sizeof(Polynode));
p->coef = xishu;
p->exp = zhishu;
tail->next=p;
tail = p;
scanf("%f %d",&xishu,&zhishu);
if(xishu==0&&zhishu==1){
break;
}
}
tail->next =NULL;
return head;
}
int LengthPolylist(Polylist L)
{
int n = 0;
Polylist p = L;
while(p->next!=NULL){
n++;
p = p->next;
}
return n;
}
void OutputPolylist(Polylist L)
{
printf("inlcude %d coef/exp list is:\n",LengthPolylist(L));
Polylist p = L->next;
while(p!=NULL){
if(p->exp==0){
printf("%.2f,%d\n",p->coef,(p->exp+1));
p = p->next;
continue;
}
printf("%.2f,%d\n",p->coef,p->exp);
p = p->next;
}
}
Polylist AddPolylist()
{
Polylist LA = CreatePolylist();
Polylist LB = CreatePolylist();
Polylist pa = LA->next;
Polylist pb = LB->next;
Polylist LC,pc,qc;
pc = (Polylist)malloc(sizeof(Polynode));
pc ->next=NULL;
LC = pc;
while(pa != NULL && pb != NULL)
{
qc = (Polylist)malloc(sizeof(Polynode));
if(pa->exp < pb->exp)
{
qc->coef = pa->coef;
qc->exp = pa->exp;
pa = pa->next;
}
else if(pa->exp == pb->exp)
{
qc->coef = pa->coef + pb->coef;
qc->exp = pa->exp;
pa = pa->next;
pb = pb->next;
}
else
{
qc->coef = pb->coef;
qc->exp = pb->exp;
pb = pb->next;
}
if(qc->coef != 0&&qc->exp!=1)
{
qc->next = pc->next;
pc->next = qc;
pc = qc;
}
else free(qc);
}
while(pa != NULL)
{
qc = (Polylist)malloc(sizeof(Polynode));
qc->coef = pa->coef;
qc->exp= pa->exp;
pa = pa->next;
qc->next = pc->next;
pc->next = qc;
pc = qc;
}
while(pb!= NULL)
{
qc = (Polylist)malloc(sizeof(Polynode));
qc->coef= pb->coef;
qc->exp = pb->exp;
pb = pb->next;
qc->next = pc->next;
pc->next = qc;
pc = qc;
}
return LC;
}
void ComputePolylist(Polylist L)/*计算多项式在x=%d的值*/
{
float xd;
float sum = 0;
Polylist p = L->next;
scanf("%f",&xd);
while(p!=0){
sum+=p->coef*pow(xd,p->exp);
p = p->next;
}
printf("ComputePolylist in x=%.2f result is:%.2f\n",xd,sum);
}
void DestroyPolylist(Polylist L)
{
printf("destory");
Polylist p,head = L;
while(p!=0){
head = p->next;
free(p);
p=head;
}
L = NULL;
}