#include"stdio.h"
#include<malloc.h>
#define Maxlen 1000
typedef int ElemType;
#define Success 1
#define ERROR 0
typedef int Status;
typedef struct PolyNode
{
int coef;
int exp;
struct PolyNode *next;
}PolyNode,*PolyList;
Status CreatPoly(PolyList *Lp)
{
int c;
int e;
PolyNode *rear,*newnode;
(*Lp)=(PolyNode *)malloc(sizeof(PolyNode));
rear = (*Lp);
while(scanf("%d %d",&c,&e)!=EOF)
{
if(c==-1&&e==-1)
break;
newnode = (PolyNode *)malloc(sizeof(PolyNode));
newnode->coef =c;
newnode->exp =e;
rear->next =newnode;
rear = newnode;
}
rear->next = NULL;
return Success;
}
Status Print(PolyList L)
{
PolyNode *p = L->next;
if(p==NULL)
{
printf("0 ");
}
while(p!=NULL)
{
printf("%d %d ",p->coef ,p->exp );
p=p->next ;
}
printf("\n");
}
Status PolyAdd(PolyList La,PolyList Lb,PolyList *Lc)
{
PolyNode *pa=La->next,*pb=Lb->next,*pc,*newnode;
int c,e;
(*Lc)=(PolyNode *)malloc(sizeof(PolyNode));
pc = (*Lc);
while(pa!=NULL||pb!=NULL)
{
if(pb==NULL||(pa!=NULL && pa->exp > pb->exp ))
{
c= pa->coef ;
e=pa->exp ;
pa=pa->next ;
}
else if(pa==NULL||(pb!=NULL&&pa->exp <pb->exp ))
{
c=pb->coef ;
e=pb->exp ;
pb=pb->next ;
}
else if(pa!=NULL && pb!=NULL)
{
c=pa->coef +pb->coef ;
e= pa->exp ;
pa=pa->next ;
pb=pb->next ;
}
if(c!=0)
{
newnode=(PolyNode *)malloc(sizeof(PolyNode));
newnode->coef =c;
newnode->exp =e;
pc->next =newnode;
pc = newnode;
}
}
pc->next =NULL;
return Success;
}
Status PolyAdd2(PolyList Temp,PolyList *Lc)
{
PolyNode *pt,*pc,*q;
pt=Temp->next;
pc = (*Lc);
while(pc->next &&pt)
{
if(pc->next->exp <pt->exp )
{
q=pt->next ;
pt->next =pc->next ;
pc->next =pt;
pt=q;
}
else if(pc->next->exp >pt->exp )
{
pc=pc->next ;
}
else
{
pc=pc->next ;
pc->coef +=pt->coef ;
q=pt->next ;
free(pt);
pt=q;
}
}
if(pt)
pc->next =pt;
return Success;
}
Status PolyMultiple(PolyList La,PolyList Lb,PolyList *Lc)
{
PolyNode *pa=La->next,*pb,*pc,*pt,*newnode;
int c,e;
PolyList Temp=(PolyNode *)malloc(sizeof(PolyNode));
(*Lc)=(PolyNode *)malloc(sizeof(PolyNode));
(*Lc)->next =NULL;
while(pa)
{
pb=Lb->next;
pt=Temp;
while(pb)
{
c=pa->coef *pb->coef ;
e=pa->exp +pb->exp ;
if(c!=0)
{
newnode = (PolyNode *)malloc(sizeof(newnode));
newnode->coef =c;
newnode->exp =e;
pt->next =newnode;
pt=newnode;
}
pb=pb->next ;
}
pt->next =NULL;
PolyAdd2(Temp,Lc);
pa=pa->next ;
}
return Success;
}
int main()
{
PolyList La,Lb,Lc;
CreatPoly(&La);
CreatPoly(&Lb);
PolyMultiple(La,Lb,&Lc);
Print(Lc);
return 0;
}
DS||一元多项式求积、求和(线性表)
最新推荐文章于 2023-09-26 09:27:28 发布