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