#include
#include
typedef struct polynode
{
int coef;
//系数
int expn;
//指数
struct polynode *next;
//指针
}*pnode;
//定义一个结构体
pnode createpoly()
//输入函数
{
int a,n,i=1;
pnode head,s,p;
printf("输入一元多项式(以0,0标志结束):\n");
printf("要求:按幂从大到小的次序输入各个接点\n");
head=(pnode)malloc(sizeof(struct polynode));
//申请一个存储空间给头指针
head->next=NULL;
//头指针的指针域为空
p=head;
//建立表头结点
do
{
printf("第%d次->系数,幂:",i++);
//格式化输出
scanf("%d,%d",&a,&n);
//格式化输入
if(a!=0||n!=0)
{
s=(pnode)malloc(sizeof(struct polynode)); //
给S申请一个存储空间
s->coef=a;s->expn=n;s->next=NULL;
//把输入的数存储到s中
p->next=s;p=s;}
//将表头结点指向s,建立新的结点
}while(a!=0||n!=0);
//判断循环是否结束
printf("\n");
return(head);} //返回头指针
void printpoly(pnode head)
//输出函数
{
pnode s,p;
int first=1;
p=head->next;
//建立表头结点
while(p!=NULL)
{
if(first) //先输出一个多项式
{
if(p->expn==1)
printf("%dx",p->coef);
//输出指数为1的系数
else if(p->expn==0)
printf("%d",p->coef);
//输出指数为0的系数
else
printf("%dx^%d",p->coef,p->expn);
//输出指数为多次的系数
first=0;
}
else
//再输出一个多项式
{
if(p->expn==1)
printf("%+dx",p->coef);
else if(p->expn==0)
printf("%+d",p->coef);
else
printf("%+dx^%+d",p->coef,p->expn);
}
p=p->next;
//将头结点指针指向下一个结点
}
printf("\n");
}
pnode addpoly(pnode pa,pnode pb)
//两个多项式相减函数
{
int n;
pnode pc,s,p;
pa=pa->next; //
指向下一个结点
pb=pb->next;
pc=(pnode)malloc(sizeof(struct polynode));
//申请表头结点空间
pc->next=NULL;p=pc;
//建立表头结点
while(pa!=LNUL&&pb!=NULL)
{
if(pa->expn>pb->expn)
//指数比较,成立时,移动pa表指针,寻找插入位置
{
s=(pnode)malloc(sizeof(struct
polynode));
s->coef=pa->coef;s->expn=pa->expn;
p->next=s;p=s;pa=pa->next;
}
else if(pa->expnexpn)
//指数比较,成立时,移动pb表指针,寻找插入位置
{
s=(pnode)malloc(sizeof(struct
polynode));
s->coef=pb->coef;s->expn=pb->expn;s->next=NULL;
p->next=s;p=s;pb=pb->next;
}
else
{
n=pa->coef-pb->coef;
//系数相减
if(n!=0)
//
{
s=(pnode)malloc(sizeof(struct
polynode));
s->coef=n;s->expn=pa->expn;s->next=NULL;
p->next=s;p=s;
}
pa=pa->next;pb=pb->next;
}
}
while(pa!=NULL)//当输入的第一个多项式不为空时,将其其保存起来,目的是为了释放。
{
s=(pnode)malloc(sizeof(struct
polynode));
s->coef=pa->coef;s->expn=pa->expn;s->next=NULL;
p->next=s;p=s;pa=pa->next;//指向下一个结点
}
while(pb!=NULL)//输入第二个多项式不为空时,将其保存起来,目的是为了释放。
{
s=(pnode)malloc(sizeof(struct
polynode));
s->coef=pb->coef;s->expn=pb->expn;s->next=NULL;
p->next=s;p=s;pb=pb->next;//指向下一个结点
}
return(pc);} //返回表头结点
main()
{
pnode poly1,poly2,poly3;
printf("建立第1个一元多项式=>\n");
poly1=createpoly();//第一个多项式的输入
printf("建立第2个一元多项式=>\n");
poly2=createpoly();//第二个多项式的输入
poly3=addpoly(poly1,poly2);
printf("第1个一元多项式为\n");
printpoly(poly1);
printf("第2个一元多项式为\n");
printpoly(poly2);
printf("相减后的一元多项式为\n");
printpoly(poly3);