#include
#include
#include
#define SIZ sizeof(node)
typedef struct polynode /*用单链表存储多项式的结点结构*/
{
int coef; /*多项式的系数*/
int exp; /*指数*/
struct polynode *next; /*next是struct polynode类型中的一个成员,它又指向
struct polynode类型的数据,以此建立链表*/
}node; /*若定为"node,*list;",意即node*与list同为结构指针类型*/
node * create(void) /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/
{
node *h,*r,*s;
int c,e;
h=(node *)malloc(SIZ); /*建立多项式的头结点,为头结点分配存储空间*/
r=h; /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
printf("coef:");
scanf("%d",&c); /*输入系数*/
printf("exp: ");
scanf("%d",&e); /*输入指数*/
while(c!=0) /*输入系数为0时,表示多项式的输入结束*/
{
s=(node *)malloc(SIZ); /*申请新结点*/
s->coef=c; /*申请新结点后赋值*/
s->exp=e; /*申请新结点后赋值*/
r->next=s; /*做尾插,插入新结点*/
r=s; /*r始终指向单链表的表尾*/
printf("coef:");
scanf("%d",&c);
printf("exp: ");
scanf("%d",&e);
}
r->next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/
return(h);
}
void polyadd(node *pa, node *pb) /*一元多项式相加函数,用于将两个多项式相加,
然后将和多项式存放在多项式pa中,并将多项式pb删除*/
{
node *p,*q,*pre,*temp;
int sum;
p=pa->next; /*令p和q分别指向pa和pb多项式链表中的第一个结点*/
q=pb->next;
pre=pa; /*位置指针,指向和多项式pa*/
while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/
{
if(p->exp
{
pre->next=p; /*将p结点加入到和多项式中*/
pre=pre->next;
p=p->next;
}
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;
temp=q;q=q->next;free(temp);
}
else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
if (q->exp
{
pre->next=q; /*将q结点加入到和多项式中*/
pre=pre->next;
q=q->next;
}
}
if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/
pre->next=p;
else /*否则将B的结点加入到和多项式中*/
pre->next=q;
}
void print(node * p) /*输出函数,打印出一元多项式*/
{
while(p->next!=NULL)
{
p=p->next;
printf(" %d*x^%d",p->coef,p->exp);
}
}
main() /*主函数*/
{
node * pa,* pb,*pc;
printf("Welcome,Let'go!");
printf("\nPlease input the coef and exp of pa:\n");
pa=create(); /*调用建立链表函数,创建多项式A*/
print(pa);
printf("\nPlease input the coef and exp of pb:\n");
pb=create(); /*同理,创建B*/
print(pb);
printf("\nSum of the polys is:\n");
polyadd(pa,pb); /*调用一元多项式相加函数*/
print(pa); /*调用输出函数,打印结果*/
printf("\n");
getch();
}
(加法器的)
#include
#include
#include
#define
SIZ
sizeof(node)
typedef
struct
polynode
/*用单链表存储多项式的结点结构*/
{
int
coef;
/*多项式的系数*/
int
exp;
/*指数*/
struct
polynode
*next;
/*next是struct
polynode类型中的一个成员,它又指向
struct
polynode类型的数据,以此建立链表*/
}node;
/*若定为"node,*list;",意即node*与list同为结构指针类型*/
node
*
create(void)
/*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/
{
node
*h,*r,*s;
int
c,e;
h=(node
*)malloc(SIZ);
/*建立多项式的头结点,为头结点分配存储空间*/
r=h;
/*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
printf("coef:");
scanf("%d",&c);
/*输入系数*/
printf("exp:
");
scanf("%d",&e);
/*输入指数*/
while(c!=0)
/*输入系数为0时,表示多项式的输入结束*/
{
s=(node
*)malloc(SIZ);
/*申请新结点*/
s->coef=c;
/*申请新结点后赋值*/
s->exp=e;
/*申请新结点后赋值*/
r->next=s;
/*做尾插,插入新结点*/
r=s;
/*r始终指向单链表的表尾*/
printf("coef:");
scanf("%d",&c);
printf("exp:
");
scanf("%d",&e);
}
r->next=NULL;
/*将表的最后一个结点的next置NULL,以示表结束*/
return(h);
}
void
polyadd(node
*pa,
node
*pb)
/*一元多项式相加函数,用于将两个多项式相加,
然后将和多项式存放在多项式pa中,并将多项式pb删除*/
{
node
*p,*q,*pre,*temp;
int
sum;
p=pa->next;
/*令p和q分别指向pa和pb多项式链表中的第一个结点*/
q=pb->next;
pre=pa;
/*位置指针,指向和多项式pa*/
while(p!=NULL&&q!=NULL)
/*当两个多项式均未扫描结束时,执行以下操作*/
{
if(p->exp
/*若p指向的多项式指数小于q指的指数*/
{
pre->next=p;
/*将p结点加入到和多项式中*/
pre=pre->next;
p=p->next;
}
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;
temp=q;q=q->next;free(temp);
}
else
/*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
if
(q->exp
{
pre->next=q;
/*将q结点加入到和多项式中*/
pre=pre->next;
q=q->next;
}
}
if(p!=NULL)
/*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/
pre->next=p;
else
/*否则将B的结点加入到和多项式中*/
pre->next=q;
}
void
print(node
*
p)
/*输出函数,打印出一元多项式*/
{
while(p->next!=NULL)
{
p=p->next;
printf("
%d*x^%d",p->coef,p->exp);
}
}
main()
/*主函数*/
{
node
*
pa,*
pb,*pc;
printf("Welcome,Let'go!");
printf("\nPlease
input
the
coef
and
exp
of
pa:\n");
pa=create();
/*调用建立链表函数,创建多项式A*/
print(pa);
printf("\nPlease
input
the
coef
and
exp
of
pb:\n");
pb=create();
/*同理,创建B*/
print(pb);
printf("\nSum
of
the
polys
is:\n");
polyadd(pa,pb);
/*调用一元多项式相加函数*/
print(pa);
/*调用输出函数,打印结果*/
printf("\n");
getch();
}
(加法器的)
对得起分数,不过俺没那么精
难道真的没高手?