struct PolyNode{
int coef;//系數
int expon;//指數
struct PolyNode *link;//指向下一個結點的指針
};
typedef struct PolyNode *Polynomial;
Polynomial P1,P2;
Polynomial PolyAdd(Polynomial P1,Polynomial P2)//多項式加法鏈表實現
{
Polynomial front,rear,temp;
int sum;
rear=(Polynomial)malloc(sizeof(struct PolyNode));
front=rear;//由front記錄結果多項式鏈表頭結點
while(P1&&P2)//當兩個多項式都有非零項待處理時
switch(Compare(P1->expon,P2->expon)){
/*第一個值大*/ case 1:
Attach(P1->coef,P1->expon,&rear);
P1=P1->link;
break;
/*第二個值大*/ case -1:
Attach(P2->coef,P2->expon,&rear);
P2=P2->link;
break;
/*兩個值相等*/ case 0:
sum=P1->coef+P2->coef;
if(sum)Attach(sum,P1->expon,&rear);
P1=P1->link;
P2=P2->link;
break;
} //當while退出時,P1、P2有一個為空。
//將未處理完的另一個多項式的所有結點依次復制到結果多項式中去
for(;P1;P1=P1->link)Attach(P1->coef,P1->expon,&rear);//P1不空
for(;P2;P2=P2->link)Attach(P2->coef,P2->expon,&rear);//P2不空
rear->link=NULL;
temp=front;
front=front->link;//令front指向結果多項式第一個非零項
free(temp);//釋放臨時空表頭結點
return front;
}
void Attach(int c,int e,Polynomial *pRear)//*pRear是指針的指針
{
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->coef=c;//對新結點賦值
P->expon=e;
P->link=NULL;
(*pRear)->link=P;
*pRear=P;//修改pRear的值
}