在一元多项式相加的函数中。首先会要求传入两个已经创建好的一元多项式PA,PB,然后进行相加,实现PA=PA+PB的功能。
程序执行过程:只有在Pa和Pb都不为空的时候程序才会进行循环,因为一元多项式以链式线性表以指数升序存储。所以每次进入循环都会首先比较Pa和Pb中的需要比较的qa和qb中指数的大小。如果qa的指数小,则会ha和qa指针都后移,继续比较。如果qa和qb的指数相等,则会把qa和qb的系数进行相加并赋值给qa的系数。从而实现相同指数的系数相加,加完后将qb所指结点删除,同时qa后qb指针都后移。如果qa的指数比qb大,则把qb所在的结点链接到qa的前面。qb指针继续后移。进行循环。这是就这个加法的具体实现过程。在最后,如果qa已经为空,而qb不为空,则把qb剩下的结点都直接链接在PA的最后。释放hb的头结点。
原文链接:https://blog.csdn.net/qq_38265137/article/details/80317209
`
typedef struct
{
int coef;//系数
int expn;//指数
struct UNARY *next;
} UNARY;
//升幂的一元多项式的相加
UNARY *unaryAdd(UNARY LA,UNARY LB)
{
//LA作为输出链
UNARY r,s,p,q;
int cmp;
p = LA->next;//用于比较
q = LB->next;//用于比较
s = LA;//用于记录p的前置
r = LB;//用于记录q的后置
while(p!=NULL && q!=NULL) { if(p->expn<q->expn) cmp = -1; else if(p->expn>q->expn) cmp = 1; else cmp = 0; switch(cmp) { case -1: { s = p; p = p->next; }; break; case 0: { int x = p->coef+q->coef; if(x!=0) { p->coef = x; s = p p = p->next; } else { //删除LA节点 s->next = p->next; free(p); p = s->next; //删除LB节点 r->next =q->next; free(q); q = r->next; } }; break; case 1: { r->next = q->next; q->next = s->next; s->next = q; s = q; q = r->next; }; break; } } if(q!=NULL) { //前面的结束条件 p = null 所以 p的前置s位于链表的尾部,s连接q s->next = q; } free(LB); return LA;
}
`