数据结构之多项式

数据结构之多项式

 下面是对多项式的基本输入和输出

#include "stdio.h"
#include "stdlib.h"
typedef struct PolyNode *Polynomial;
struct PolyNode
{
    int coef;
    int expon;
    Polynomial link;
};

Polynomial ReadPoly(void);
Polynomial Mult(Polynomial P_1,Polynomial P_2);
Polynomial Add(Polynomial P_1,Polynomial P_2);
void PrintPoly(Polynomial P);
void Attach(int c,int e,Polynomial *pRear);
int main(void)
{
    Polynomial P1;
    P1=ReadPoly();
    PrintPoly(P1);
    wait(60);
    return 0;
}
Polynomial ReadPoly(void)//读取多项式 
{
    Polynomial P,Rear,t;
    int c,e,N;
    scanf("%d",&N);
    P=(Polynomial)malloc(sizeof(struct PolyNode));
    P->link=NULL;
    Rear=P;
    while(N--)
    {
        scanf("%d %d",&c,&e);
        Attach(c, e, &Rear);
    }
    t=P;
    P=P->link;
    free(t);
    return P;
}

void Attach(int c,int e,Polynomial *pRear)
{
    Polynomial P;
    P=(Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;
    P->expon=e;
    P->link=NULL;
    (*pRear)->link=P;
    *pRear=P;
}
void PrintPoly(Polynomial P)
{
    int flag=0;
    if(!P){printf("0 0\n");return ;
    }
    
    while(P)
    {
        if(!flag)
            flag=1;
        else
            printf(" ");
        printf("%d %d",P->coef,P->expon);
        P=P->link;
         
    }
}

 下面是多项式加法部分

Polynomial Add(Polynomial P_1,Polynomial P_2)
{
    Polynomial P_Add,front,temp;
    int sum;
    P_Add=(Polynomial)malloc(sizeof(struct PolyNode));
    front=P_Add;
    while(P_1&&P_2)
    {
        if(P_1->expon > P_2->expon)
        {
            Attach(P_1->coef, P_1->expon, &P_Add);
            P_1 = P_1->link;
        }
        else if(P_1->expon < P_2->expon)
        {    
            Attach(P_2->coef, P_2->expon, &P_Add);
            P_2 = P_2->link;
        }    
        else if(P_1->expon == P_2->expon)    
        {
            sum = P_1->coef+P_2->coef; 
            if(sum)Attach(sum, P_2->expon, &P_Add);
            P_2 = P_2->link;    
            P_1 = P_1->link;
        }

        

    }     
        for(;P_1;P_1=P_1->link)    Attach(P_1->coef, P_1->expon, &P_Add);
        for(;P_2;P_1=P_2->link)    Attach(P_2->coef, P_2->expon, &P_Add);    
        P_Add->link=NULL;
        temp=front;
        front=front->link;
        free(temp);
        return     front;
            
}

 

posted @ 2019-01-19 10:43  my_everything  阅读(970)  评论(0编辑  收藏  举报