【结构与算法】一元多项式的相加运算

一元多项式相加的具体实现:

在一元多项式相加的函数中。首先会要求传入两个已经创建好的一元多项式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;

}
`

上一篇:Windows下C语言调用dll动态链接库


下一篇:关于 QA 和自动化测试