一元多项式相乘
typedef struct PolyNode *Polynomial;
struct PolyNode{
int coef;
int exp;
Polynomial next;
}
int main()
{
Polynomial P1,P2,PP,PS;
P1=ReadPoly();
P2=ReadPoly();
PP=Mult(P1,P2);
PrintPoly(PP);
PS=Add(P1,P2);
PrintPoly(PS);
return 0;
}
Polynomial ReadPoly(){
Polynomial P,Rear,t;
int c,e,N;
scanf("%d",&N);
P=(Polynomial)malloc(sizeof(struct PolyNode));//链表头空结点
p->next=NUll;
Rear=P;
while(N--){
scanf("%d %d",&c,&e);
Attach(c,e,&Rear); //将当前项插入多项式尾部
}
t=P;P=P->next;free(t); //删除临时生成的头结点
return P;
}
void Attach(int c,int e,Polynomial *pRear){//读入多项式
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->coef=c; //对新结点赋值
P->exp=e;
p->next=NULL;
(*pRear)->next=P;
*pRear=P; //修改*pRear值
}
Polynomial Mult(Polynomial P1,Polynomial P2){
Polynomial p,Rear,t1,t2,t;
int c,e;
if(!P1||!P2) return NULL;
t1=P1;t2=P2;
P=(Polynomial)malloc(sizeof(struct PolyNode)); P->next=NULL;
Rear=P;
while(t2){ //先用P1的第一项乘P2,得到P
Attach(t1->coef*t2->coef,t1->exp+t2->exp,&Rear);
t2=t2->next;
}
t1=t1->next;
while(t1){
t2=P2;Rear=P;
while(t2){
e=t1->expon+t2->expon;
c=t1->coef*t2->coef;
while(Rear->next && Rear->next->exp>e)
Rear=Rear->next;
if(Rear->next && Rear->next->exp==e)
if(Rear->next->coef+c)
Rear->next->coef+=c;
else{
t=Rear->next;
Rear->next=t->next;
free(t);
}
else{
t=(Polynomial)malloc(sizeof(struct PolyNode));
t->coef=c;t->exp=e;t->next=Rear->next;
Rear->next=t;Rear=Rear->next;
}
t2=P;P=P->next;free(t2);
return P;
}
void PrintPoly(Polynomial P){
int flag=0;
if(!P) {printf("0 0\n");return ;}
while(P){
if(!flag)
flag=1;
else
printf(" ");
printf("%d %d",P->coef,P->exp);
P=P->next;
}
printf("\n");
}