多項式加法運算鏈表實現


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

 
         
         
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM