一元多項式加法
阿新 • • 發佈:2021-09-16
#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); }