cofe(多项式的系数) | exp(多项式的指数) | next(指向下一个结点的指针) |
Node *A,*B;{Node *NODE(A,B)//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的头节点返回。
}