算法是对两个单链表进行求和运算,挺简单的一个单链表的应用。
#include <stdlib.h>
#include <stdio.h>
typedef struct Polynode
{
int coef; //系数
int exp; //指数
Polynode *next;
}Polynode,*Polylist;
Polylist Polycreate() //构造多项式链表
{
Polynode *head,*rear,*s;
int c,e;
head=(Polylist)malloc(sizeof(Polynode));//建立多项式的头结点
rear=head; //尾指针指向链表尾
scanf("%d,%d",&c,&e);//输入多项式的系数和指数项
while(c!=0) //如果系数不为0
{
s=(Polylist)malloc(sizeof(Polynode)); //建立1项
s->coef=c;
s->exp=e;
rear->next=s;
rear=s;
scanf("%d,%d",&c,&e);
}
rear->next=NULL;
return(head);
}
void Polyadd(Polylist a,Polylist b) //多项式相加
{
Polylist p,q,tail,temp;
int sum;
p=a->next; //p,q指向a,b链表的第一个结点
q=b->next;
tail=a; //tail指向尾结点
while(p!=NULL&&q!=NULL) //两个多项式扫描未结束
{
if(p->exp<q->exp) //p指向的多项式项的指数小于q,则将p加入到和多项式
{
tail->next=p;
tail=p;
p=p->next;
}
else if(p->exp==q->exp) //指数相等,相应系数相加
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
tail->next=p;tail=p;
p=p->next;
temp=q;q=q->next;
free(temp);
}
else
{
temp=p;p=p->next;free(temp);
temp=q;q=q->next;free(temp);
}
}
else //q指向的多项式项的指数小于p,则将q加入到和多项式
{
tail->next=q;
tail=q;
q=q->next;
}
}
if(p!=NULL)
tail->next=p;
else
tail->next=q;
}
void printflist(Polylist pl) //打印和多项式
{
while(pl->next)
{
printf("%d,%d,",pl->next->coef,pl->next->exp);
pl->next=pl->next->next;
}
}
void main()
{
Polynode *polya,*polyb;
polya=Polycreate();
polyb=Polycreate();
Polyadd(polya,polyb);
printflist(polya);
}