1. 程式人生 > >資料結構筆記(三)

資料結構筆記(三)

一元多項式相加

struct PolyNode{
    int coef;
    int exp;
    struct PolyNode *next;
};
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));
    while(P1&&P2){
        switch(Compare(P1->coef,P2->coef){
            case  1:
                    Attach(P1->coef,P1->exp,&rear);
                    P1=P1->next;
                    break;
            case -1:
                    Attach(P2->coef,P2->exp,&rear);
                    P2=P2->next;
                    break;
            case 0:
                    sum=P1->coef+P2->coef;
                    if(sum) Attach(sum,P1->exp,&rear);
                    P1=P1->next;
                    P2=P2->next;
                    break;
                }
            }

for(;P1;P1=P1->next) Attach(P1->coef,P1->exp,&rear);
for(;P2;P2=P2->next) Attach(P2->coef,P2->exp,&rear);
rear->next=NULL;
temp=front;
front=front->next;
free(temp);
return front;
}
void Attach(int c,int e,Polynomial *pRear){
    Polynomial P;
    P=(Polynomial)malloc(sizeof(struct Polynomial));
    P->coef=c;
    P->expon=e;
    P->next=NULL;
    (*pRear)->next=P;
    *pRear=P;
}