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的值 }