多项式加法运算
基本思想
将两个多项式相加 , 主要思路是 : 相同指数的项系数相加 , 其余部分copy
实现
采用不带头结点的单向链表 , 按照指数递减的顺序排列各项
由分别表示系数和指数的两项以及指针构成一个元素

定义 :
struct PolyNode{int coef; //系数int expon; //指数struct PolyNode *lint; 指向下一个结点的指针};typedef struct PolyNode *Polynomial;Polynomial P1,P2;
算法思路
两个指针P1和P2分别指向这两个多项式第一个结点 , 不断循环 ;
P1->expon == P2->expon: 指数相等的情况下系数相加 , 若结果不为0 , 则作为结果多项式对应项的系数。 同时 , P1和P2都分别指向下一项 ;P1->expon > P2->expon: 将P1的当前项存入结果多项式 , 并使P1指向下一项 ;P1->expon < P2->expon: 将P2的当前项存入结果多项式 , 并使P2指向下一项 ;- 当某一多项式所有项都处理完时 , 将另一多项式的所有结点依次复制到结果多项式中去

实现
Polynomial PolyAdd(Polynomial P1, Polynomial P2){Polynomial front, rear, temp;int sum;rear = (Polynomial)malloc(sizeof(struct PolyNode));front = rear; //由front记录结果多项式链表头结点while(P1 && P2) //当两个多项式都有非零项待处理时switch (Compare(P1->expon, P2->expon)){case 1:Attach(P1->coef, P1->expon, &rear)P1 = P1->link;break;case -1:Attach(P2->coef, P2->expon, &rear)P2 = P2->link;break;case 0:sum = P1->coef + P2->coef;if(sum)Attach(sum, P1->expon, &rear);P1 = P1->link;P2 = P2->link;break}/*将未处理完得另一个多项式的所有结点一次复制到结果多项式中去*/for(;P1;P1 = P1->link)Attach(P1->coef, P1->expon. &rear);for(;P2;P2 = P2->link)Attach(P2->coef, P2->expon. &rear);rear->link = NULL;temp = front;front = front->link; //令front指向结果多项式第一个非零项free(temp);return front;}
函数 Attach()
void Attach(int c, int e, Polynomial *pRear){Polynomial P;P = (Polynomial)malloc(sizeof(struct PolyNode));P->coef = c; //对新结点赋值P->expon = e;P->link = NULL;(*pRear)->link = P;*pRear = P; //修改pRear的值}

