多项式的加法运算
P1=3X^5+4X^4- X^3 +2X-1
+P2= 2X^4+X^3-7X^2+ X
P=3X^5+6X^4 -7X^2+3X-1
主要思路:相同指数的项系数相加,其余部分进行拷贝。
采用不带头结点的单向链表,按照指数递减的顺序排列各项
struct PolyNode
{
int coef; //系数
int expon; //指数
struct PolyNode *link; //指向下一个节点的指针
};
typedef struct PolyNode *Polynomial;
Polynomial P1,P2;
int Compare(int expon1,int expon2)
{
if (expon1>expon2)
return 1;
if (expon1==expon2)
return 0;
if (expon1==expon2)
return -1;
}
void Attach(int coef,int expon,Polynomial *PTRrear)
{
Polynomial P;
P=(Polynomial)malloc(sizeof(struct PolyNode));
P->coef=coef;
P->expon=expon;
(*PTRrear)->link=P;
P->link=NULL;
*PTRrear=P;
}
Polynomial PloyAdd(Polynomial P1,Polynomial P2)
{
Polynomial front,rear,temp;
int sum;
rear=(Polynomial)malloc(sizeof(struct PolyNode));
front=rear;
while (P1 && P2)
{
switch (Compare(P1->expon,P2->expon))
{
case1:
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;
free(temp);
return front;
}