一元多项式加法

#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
    int coe;//系数 
    int index;//指数
    struct Node *next; 
}LNode,*LinkList;
void create(LinkList &L,int n){
    int a,b;
    LinkList p,q;
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    q=L;
    int i;
    for(i=0;i<n;i++){
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%d %d",&a,&b);
        p->coe=a;
        p->index=b;
        q->next=p;
        q=p;
        p->next=NULL; 
    }
}
void  addition(LinkList &A,LinkList &B,LinkList &C){
    A=A->next;
    B=B->next;
    LinkList p,q=C;
    while(A&&B){
        if(A->index>B->index){
            p=(LinkList)malloc(sizeof(LNode));
            p->coe=B->coe;
            p->index=B->index;
            q->next=p;
            p->next=NULL;
            q=p;
            B=B->next;
        }
        else if(A->index<B->index){
            p=(LinkList)malloc(sizeof(LNode));
            p->coe=A->coe;
            p->index=A->index;
            q->next=p;
            p->next=NULL;
            q=p;
            A=A->next;
        }
        else{
            p=(LinkList)malloc(sizeof(LNode));
            p->coe=A->coe+B->coe;
            if(p->coe){
                p->index=A->index;
                q->next=p;
                p->next=NULL;
                q=p;
            }
            else free(p);
            A=A->next;
            B=B->next;
        }
    }
    while(A){
            p=(LinkList)malloc(sizeof(LNode));
            p->coe=A->coe;
            p->index=A->index;
            q->next=p;
            p->next=NULL;
            q=p;
            A=A->next;
    }
    while(B){
            p=(LinkList)malloc(sizeof(LNode));
            p->coe=B->coe;
            p->index=B->index;
            q->next=p;
            p->next=NULL;
            q=p;
            B=B->next;
    }
    free(A);
    free(B);
}
void print(LinkList &L){
    L=L->next;
    while(L){
        printf("%dx%d\n",L->coe,L->index);
        L=L->next;
    }
}
int main(){
    int n;
    scanf("%d",&n);
    LinkList A,B,C;
    create(A,n);
    scanf("%d",&n);
    create(B,n);
    create(C,0);
    addition(A,B,C);
    print(C);
}

 

posted @ 2021-09-16 21:05  不负韶华。  阅读(35)  评论(0编辑  收藏  举报