多项式的四则运算
if(rear->next->next
PolyNode *pa , *pb , *rear , *s ; PolyC = (PolyNode
==NULL) return; //p为最后一个元素且指数最小,提前返回
}
while(prior->next != temp) prior =
}
*)malloc(sizeof(PolyNode));
pa = PolyA->next; pb = PolyB->next; rear = PolyC; rear->next = NULL; while(pa && pb) {
if(pa->exp == pb->exp) {
sum = pa->coef-pb->coef; if(fabs(sum)>1e-6) //如果两
prior->next ; }
//多项式相减,返回差多项式链表头指针 PolyList PolySub(PolyList PolyA , PolyList PolyB) {
PolyList PolyC ; SortPoly(PolyA); SortPoly(PolyB);
float sum =0 ;//存储两项系数差 }
prior->next = temp->next; temp->next = rear->next ; rear->next = temp; rear = rear->next ;
两系数不为0,则将两项和存入s中,并插入PolyC尾部
{
s = (PolyNode
*)malloc(sizeof(PolyNode));
s->coef = sum; s->exp = pa->exp; rear->next = s; rear = s;
11 多项式的四则运算
}
}
//pa,pb指针后移 pa = pa->next; pb = pb->next;
}
}
s->coef = -pb->coef; s->exp = pb->exp; rear->next = s; pb = pb->next; rear = s ;
else if(pa->exp>pb->exp) //若
pa指数大于pb指数,将pa结点副本插入到PolyC尾部
{
s = (PolyNode
while(pa) {
s = (PolyNode
*)malloc(sizeof(PolyNode));
}
else //若pb指数大于pa指数,
s->coef = pa->coef; s->exp = pa->exp; rear->next = s ; rear = s ; pa = pa->next;
*)malloc(sizeof(PolyNode));
} while(pb) {
s = (PolyNode s->coef = pa->coef; s->exp = pa->exp; rear->next = s; pa = pa->next; rear = s ;
将pb结点副本插入到PolyC尾部
{
s = (PolyNode
*)malloc(sizeof(PolyNode));
s->coef = -pb->coef;
12 *)malloc(sizeof(PolyNode));
多项式的四则运算
}
}
s->exp = pb->exp; rear->next = s; pb = pb->next; rear = s ;
else printf(\ \
p->coef , p->exp);
}
if(fabs(p->coef)>1e-6)printf(\
}
else printf(\输出分割点 p = p->next ;
rear->next = NULL; return PolyC;
\ }
if(Poly == NULL) {printf(\PolyNode *p=Poly->next ;
if(p == NULL){printf(\ //
//多项式相乘,结果由PolyC返回 PolyList PolyMutiply(PolyList PolyA , PolyList PolyB) {
if(fabs(p->coef)>1e-6) {
if(fabs(p->next->coef)>1e-6)
*s;
if(PolyA==NULL || PolyB==NULL) PolyList PolyC;
PolyNode *pa , *pb , *pc_pre , *pc , printf(\
//输出多项式
void DisplayPolyList(PolyList Poly) {
如果链表为空提前退出
while(p->next!=NULL) {
return NULL; //若某一个多项式为空,返回
printf(\
13 多项式的四则运算
PolyC =
pb = PolyB->next ; while(pb) {
//两项对应相乘,结果存入到
(PolyNode*)malloc(sizeof(PolyNode));
pc = PolyC ; pc->next = NULL;
if(PolyA->next==NULL || PolyB->next==NULL) return PolyC;
SortPoly(PolyA); SortPoly(PolyB); pa = PolyA->next ; pb = PolyB->next; s =
s中
pc = PolyC->next; if(pa == PolyA->next &&
pb==PolyB->next) //避免重复插入第一个结点
{ } s =
pb=pb->next; if(pb == NULL) break;
(PolyNode*)malloc(sizeof(PolyNode));
s->coef = pa->coef * pb->coef ; s->exp = pa->exp + pb->exp ; if(pc->next == NULL) {
pc->next = s ; pc =s ;
pc->next = NULL ;
(PolyNode*)malloc(sizeof(PolyNode));
s->coef = pa->coef *
pb->coef ;
s->exp = pa->exp +
pb->exp ;
//查找s合适的插入位置,使
} //直接插入第一个结点 while(pa) {
得插入后PolyC仍为升序排列
14 多项式的四则运算
while( pc && pc->exp >
//多项式相除,结果存到PolyC中,商和余数用系数为0的结点分开
PolyList PolyDivide(PolyList PolyA , PolyList PolyB) {
if(!PolyA || !PolyB) return NULL; if(PolyB->next == NULL){printf(\
s->exp) { pc_pre = pc ; pc=pc_pre->next ;}
if(pc
==NULL){pc_pre->next=s ; s->next =NULL;pb=pb->next;}
else if( pc->exp <
s->exp){pc_pre->next = s ; s->next = pc ; pb=pb->next; }
else if(s->exp == pc->exp ) {
pc->coef += s->coef ; free(s);
除项为空!\\n\
PolyList PolyT1 , PolyT2 , pt , s ,
PolyC , p , s_pre;
PolyC =
(PolyList)malloc(sizeof(PolyNode));
PolyC->next=NULL;
if(PolyA->next==NULL) return PolyC; p = PolyA->next; PolyT1 =
if(fabs(pc->coef)<1e-6 ){pc_pre->next
= pc->next ; free(pc);} }
}
return PolyC;
}
pa = pa->next;
}
pb = pb->next;
(PolyList)malloc(sizeof(PolyNode));
pt = PolyT1;
s_pre=(PolyList)malloc(sizeof(PolyNo
de));
15