其他分享
首页 > 其他分享> > 多项式加法

多项式加法

作者:互联网

多项式加法运算

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

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

算法思路:两个指针P1和P2分别指向这两个多项式第一个结点,不断循环:

当某一多项式处理完时将另一个多项式的所有节点依次复制到结果多项式中取

Polynoimal PolyAdd(Polynomial P1, Polynomial P2){
    Polynoimal front,rear,temp;
    int sum;
    rea = (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;
        }
    //将未处理完的另一个多项式的所有节点依次复制到结果多项式中去
    for(;P1;P1 = P1->link)Attach(P1->expon, &rear);
    for(;P2;P2 = P2->link)Attach(P2->expon, &rear);
    rear->link=NULL;
    temp=front;
    front=front->link;//令front指向结果多项式第一个非零项
    free(temp);//释放临时空表头结点
    return front;
}

void Attach(int c, int e, Polynomial *pRear){
    Polynomial P;
    
    P = (Polynomial)malloc(sizeof(struct PolyNode));
    P->coef = c; //对新节点复制
    P->expon= e;
    P->link=NULL;
    (*pRear)->link = P;
    *pRear = P; //修改pRear值
}

标签:P2,P1,多项式,link,加法,front,expon
来源: https://www.cnblogs.com/Reion/p/15967723.html