多项式的加法运算

多项式采用不带头节点的单向链表,按照指数递减的顺序排列各项

struct PolyNode{
    int coef;//系数
    int expon;//指数
    struct PolyNode *link;//指向下一个节点的指针
};
typedef struct PolyNode *Polynominal;
Polynominal P1,P2;

首先,定义一个方法来处理节点

void Attach(int c,int e,Polynomial *pRear){
//c是系数,e是指数
//pRear是指向当下的尾节点,他是指针的指针,为的是这样传递可将改变后的内容返回
    Polynomial P;
    P->coef=c;
    P->expon=e;
    P->link=NULL;
    (*pRear)->link=P;
    *pRear=P;//修改尾节点的值
}

多项式操作:

Polynomial PolyAdd(Polynomial P1,Polynomial P2){
    Polynomial front,rear,temp;
    int sum;
    rear=(Polynomial)malloc(sizeof(struct PolyNode));
    front=rear;
    while(P1&P2){//当两个多项式都有非零项待处理时
        switch(Compare(P1->expon,P2->expon)){//比较两个多项式的指数
            case 1://P1的指数大
                Attach(P1->coef,P1->expon,&rear);
                P1=P1->link;
                break;
            case -1://P2的指数大
                Attach(P2->coef,P2->expon,&rear);
                P2=P2->link;
                break;
            case 0://P1和P2的指数相等
                sum=P1->coef+P2->coef;
                if(sum)
                       Attach(sum,P1->coef,&rear);
                P1=P1->link;        
                P2=P2->link;
                break;
          }
     }
     for(;P1;P1=P1->link)//P1不空时,将剩余的部分连接上
               Attach(P1->coef,P1->expon,&rear);
     for(;P2;P2=P2->link)
               Attach(P2->coef,P2->expon,&rear);
     rear->link=NULL;//尾指针的下一个为空
     temp=front;
     front=front->link;//头指针指向第一个非零项
     free(temp);
     return front;
}

 

你可能感兴趣的:(#,数据结构)