数据结构一元多项式的相加

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include
typedef struct polyn //单链表存储多项式的结点结构
{
float coef; //系数
int exp; //指数
struct polyn *next;
}PolyNode, *PLinkList;

PLinkList CreatePolyn()//创建一元多项式,使其指数递减
{
PolyNode *p,*q,*s;
PolyNode *head=NULL;
int exp2;
float coef2;
head=(PLinkList)malloc(sizeof(PolyNode));//动态生成一个头结点
if(!head)
return NULL;
head->coef=0;
head->exp=0;
head->next=NULL;
do
{
printf("输入系数(系数指数都为0结束)");
scanf("%f",&coef2);
printf("输入指数(系数指数都为0结束)");
scanf("%d",&exp2);
if((long)coef2==0&&exp2==0)break;//判断输入的系数和指数是否为零
s=(PolyNode*)malloc(sizeof(PolyNode));
if(!s)
return NULL;
s->exp=exp2;
s->coef=coef2;
q=head->next;
p=head;
while(q&&exp2exp) //将新输入的指数和q指向的节点指数进行比较
{
p=q;
q=q->next;
}
if(q==NULL||exp2>q->exp)//q指向要插入的位置,p指向前驱
{
p->next=s;//插入s结点
s->next=q;
}
else
q->coef+=coef2;//若指数相同,则系数相加
}while(1);
return head;
}
PolyNode *Reverse(PLinkList head)//使多项式呈指数递增
{
PolyNode *q,*r,*p=NULL;
q=head->next;
while(q)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
head->next=p;
return head;
}
PolyNode *AddPolyn(PLinkList A,PLinkList B)//一元多项式相加
{
PolyNode *p,*q,*pre,*r;
float sum;
p=A->next;//p、q分别指向两个多项式链表的第一个结点
q=B->next;
pre=A;
while(p!=NULL&&q!=NULL)
{
if(p->expexp)//若p的指数小于q指向的,则p结点加入和多项式
{
pre->next=p;
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp)//若指数相等,则系数相加
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
pre->next=p;
pre=pre->next;
p=p->next;
r=q;
q=q->next;
free(r);
}
else //指数和为零,则删除,并指向下一个结点
{
r=p->next;
free(p);
p=r;
r=q->next;
free(q);
q=r;
}
}
else //若p的指数大于q,则q结点进入
{
pre->next=q;
pre=pre->next;
q=q->next;
}
}
if(p!=NULL)//加入剩下的结点
pre->next=p;
else
pre->next=q;
return (A);
}
void OutPut(PLinkList head)//输出
{
PolyNode *p=head->next;
while(p)
{
printf("%1.1f",p->coef);
if(p->exp)
printf("*x^%d",p->exp);
if(p->next && p->next->coef>0)
printf("+");
p=p->next;
}
}
void main()
{
printf("\t\t\t两个一元多项式的相加\n\n");
PLinkList A,B,C;
A=CreatePolyn();
printf("A(x)=");
OutPut(A);
printf("\n");
B=CreatePolyn();
printf("B(x)=");
OutPut(B);
printf("\n");
C=AddPolyn(A,B);
printf("C(x)=A(x)+B(x)=");
OutPut(C);
printf("\n");
}

相关文档
最新文档