1、建立一元多项式的链式存储结构
Polylist polycreate(Polylist head){
Polylist *rear, *new_node;
int c,e;
rear=head=(Polynode *)malloc(sizeof(Polynode));
cin>>c>>e;//输入系数和指数
while(c!=0){
//建立新项
new_node=(Polynode)malloc(sizeof(Polynode));
new_node->coef=c;
new_node->exp=e;
//尾插
rear->next=new_node;
rear=s;
cin>>c>>e;
}
rear->next=NULL;
return (head);
}
2、两个一元多项式相加
思路:将两个多项式从头扫描,指数相同项相加,如果为0则释放该空间,如果非0则构成一项,最终指数不同的项按指数升序排列。
用变量p、q分别指向链A、B中的第一结点,把结果存放在A中。若p->next < q->next 说明p是其中一项,p后移;若p->next > q->next 说明q是其中一项,q后移。
void polyadd(Polylist a, Polylist b){
Polynode *p=a->next, *q=b->next, *tail=a;
while(p!=NULL&&q!=NULL){
if(p->exp<q->exp){
//尾插p
tail->next=p; tail=p; p=p->next;
}else if(p->exp==q->exp){
if((sum=p->coef+q->coef)!=0){
p->coef=sum;
//尾插
tail->next=p; tail=p; p=p->next;
//删除q
temp=q; q=q->next; free(temp);
}else{
temp=p; p=p->next; free(temp);
temp=q; q=q->next; free(temp);
}
}else if(p->exp>q->exp){
//尾插q
tail->next=q; tail=q; q=q->next;
}
}
//A B还有剩
if(p) pre->next=p;
else pre->next =q;
}