【结构与算法】一元多项式的相加运算
作者:互联网
一元多项式相加的具体实现:
在一元多项式相加的函数中。首先会要求传入两个已经创建好的一元多项式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
代码实现
`
include <stdio.h>
include <stdlib.h>
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;
}
`
标签:一元,LA,多项式,相加,next,qa,qb,UNARY 来源: https://www.cnblogs.com/zhujiaozhu/p/15351355.html