稀疏多项式合并(链表实现)

#include <stdio.h>
#include <stdlib.h>

//稀疏多项式合并

typedef struct Pnode{
    float coef; //系数
    int expn; //指数
    struct Pnode *next;//指针域
}PNODE,*Polynomial;

//多项式创建
void CreatePolyn(Polynomial *P,int n)
{
    Polynomial s,q;
    (*P) = (Polynomial)malloc(sizeof(PNODE));
    (*P)->next = NULL;
    q = *P;
    int i;
    for(i=1;i<=n;i++)
    {
        s = (Polynomial)malloc(sizeof(PNODE));
        s->next = NULL;
        scanf("%f%d",&(s->coef),&(s->expn));
        q->next = s;
        q = s;
    }
}

void print(Polynomial *P)
{
    Polynomial p = (*P)->next;
    while(p)
    {
        printf("%f %d\n",p->coef,p->expn);
        p = p->next;
    }
}

void MergePoly(Polynomial *Pa,Polynomial *Pb)
{
    Polynomial p1,p2,p3,p,q;
    p1 = (*Pa)->next;
    p2 = (*Pb)->next;
    p3 = (*Pa);
    while(p1&&p2)
    {
        if(p1->expn == p2->expn)
        {
            if(p1->coef+p2->coef <0.00001)
            {
                p = p1;
                q = p2;
                p1 = p1->next;
                p2 = p2->next;
                free(q);
                free(p);
            }
            else
            {
                p1->coef = p1->coef + p2->coef;
                p3->next = p1;
                p3 = p1;
                p = p2;
                p1 = p1->next;
                p2 = p2->next;
                free(p);
            }
        }
        else if(p1->expn < p2->expn)
        {
            p3->next = p1;
            p3 = p1;
            p1 = p1->next;
        }
        else
        {
            p3->next = p2;
            p3 = p2;
            p2 = p2->next;
        }
    }
    while(p1)
    {
        p3->next = p1;
        p3 = p1;
        p1 = p1->next;
    }
    while(p2)
    {
        p3->next = p2;
        p3 = p2;
        p2 = p2->next;
    }
    free(*Pb);
}

int main()
{
    Polynomial m1,m2,p;
    CreatePolyn(&m1,4);
    print(&m1);
    CreatePolyn(&m2,3);
    print(&m2);
    printf("\n");
    p = m1;
    MergePoly(&m1,&m2);
    print(&p);
    return 0;
}

  

posted @ 2022-07-15 11:27  kangobs  阅读(56)  评论(0)    收藏  举报