1. 程式人生 > 其它 >一元多項式加法

一元多項式加法

#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); }