用循环链表对两个多项式求和的算法

cofe(多项式的系数 )exp(多项式的指数)next
Node *NODE(A,B)//A和B是两个多项式;

Node *A,*B;{

int i,j,k;

Node *p,*q,*q1,*q2;

float x;

q1=A;q2=B;

q=malloc(sizeof(Node));    //生成一个新节点p,用于存储A与B的和

q->cofe=0;    q->exp=-1;q->next=q;    //假设多项式的头节点的系数为0,指数为-1,建立一个循环链表;

p=q;    //设一个p指针用于保存头节//点,以便之后能找到该链表;

q1=q1->next;    q2=q2->next;    //将A和B分别指向第一个节点

while(q1!=A&&q2!=B){    //当q1和q2都没有遍历完的时候;

if(q1->exp==q2->exp){    //如果q1的指数等于q2的指数则将q1的系数与q2的系数相加之后存入x;

x=q1->cofe+q2->cofe;

if(x!=0)            //如果x不为0,则将和x插入到p的尾部;

{

q->next=malloc(sizeof(Node));

q=q->next;

q->cofe=x;q->exp=q1->exp;

}

q1=q1->next;    q2=q2->next;    

}

else{                    

q->next=malloc(sizeof(Node))

q=q->next;

if(q1->exp<=q2->exp){            //q1的指数与q2的指数不想等,且q1的指数小于q2的指数,则将q1插入到p的尾部;

q->cofe=q1->cofe;    q->exp=q1->exp;

q1=q1->next;                //q1指向下一个节点后在与q2进行比较;

}    

else{

q->cofe=q2->cofe;    q->exp=q2->exp;        //反之,如果q2的指数比q1的指数小,则将q2的节点插入到p的尾部;

q2=q2->next

}

while(q1!=A){                //如果q1还有元素而q2没有了,则将剩下的q1的所有节点插入到p当中;

q->next=malloc(sizeof(Node));

q=q->next;

q->cofe=q1->cofe;    q->exp=q1->exp;

q1=q1->next;

}

while(q2!=B){                //如果q2还有元素而q1没有了,则将剩下的q2插入到p中;

q->next=malloc(sizeof(Node));

q=q->next;

q->cofe=q2->cofe;    q->exp=q2->exp;

q2=q2->next;

}

return p;                    //执行完所有操作后将p的头节点返回。

}

阅读更多

没有更多推荐了,返回首页