A=a1+b1*X+c1*X^2+d1*X^3+...
B=a2+b2*X+c2*X^2+d2*X^3+...
C=(a1+a2)+(b1+b2)*X+(c1+c2)*X^2+(d1+d2)*X^3+...
1 typedef int datatype; 2 3 typedef struct node{ 4 float coef;//系数 5 int exp;//指数 6 struct pnode *next; 7 } polynode; 8 polynode *POLYADD(polynode *A,polynode *B){//A,B是两个多项式,函数返回A,B的多项式 9 int i,j,k; 10 polynode *ptr, 11 *q, //指向和多项式C的指针 12 *q1, //指向A多项式的指向 13 *q2; //指向B多项式的指向 14 float x; 15 q1=A; 16 q2=B; 17 q=malloc(sizeof(polynode)); //生成多项式的头节点 18 q->coef=0; //将多项式的头节点赋值 19 q->exp=-1; 20 q->next=q; //循环链表 21 ptr=q; //ptr指向和多项式的头节点 22 q1=q1->next; //q1指向A的第一个节点 23 q2=q2->next; //q2指向B的第一个节点 24 while((q1!=A)&&(q2!=B)){ 25 //从低指数到搞指数逐项求和 26 if(q1->exp==q2->exp){ //指数相同的项 27 x=q1->coef+q2->coef; //系数相加 28 if(x!=0){ 29 q->next=malloc(sizeof(polynode)); 30 q=q->next; 31 q->coef=x; 32 q->exp=q1->exp; 33 } 34 q1=q1->next; //q1指向A的下一个节点 35 q2=q2->next; //q2指向B的下一个节点 36 } 37 else{ 38 //指向不同的项 39 q->next=malloc(sizeof(polynode)); 40 q=q->next; 41 if(q1->exp>q2->exp){ //如果A多项式当前项的指数大于B的 42 q->coef=q2->coef; 43 q->exp=q2->exp; 44 q2=q2->next; 45 } 46 else{ 47 q->coef=q1->coef; //如果B多项式当前项的指数大于A的 48 q->exp=q1->exp; 49 q1=q1->next; 50 } 51 } 52 } 53 while(q1!=A){ 54 q->next=malloc(sizeof(polynode)); 55 q=q->next; 56 q->coef=q1->coef; 57 q->exp=q1->exp; 58 q1=q1->next; 59 } 60 while(q2!=B){ 61 q->next=malloc(sizeof(polynode)); 62 q=q->next; 63 q->coef=q2->coef; 64 q->exp=q2->exp; 65 q2=q2->next; 66 } 67 q->next=ptr; //令多项式最末的节点指向头节点 68 return ptr; //返回多项式头节点指针 69 }