#include<stdio.h>
#include<stdlib.h>
typedef struct pnode
{
float coef;
int exp;
pnode* next;
}polynode;
int main()
{
polynode *a,*b,*c;
polynode* CREATELIST_R(int n);
void OUT(polynode *head);
polynode* POLYADD(polynode *A,polynode *B);
a=CREATELIST_R(3);
OUT(a);
b=CREATELIST_R(5);
OUT(b);
c=POLYADD(a,b);
OUT(c);
return 0;
}
void INSERT_AFTER(polynode *p,float cc,int ee)
{
polynode* s;
s=(polynode *)malloc(sizeof(polynode));
s->coef=cc;
s->exp=ee;
s->next=p->next;
p->next=s;
}
polynode *CREATELIST_R(int n)
{
polynode *head,*r;
int i;
float cc;
int ee;
head=(polynode *)malloc(sizeof(polynode));
head->exp=-1;
head->next=NULL;
r=head;
for(i=1;i<=n;i++)
{
printf("input (coef,exp):\n");
scanf("%f %d",&cc,&ee);
INSERT_AFTER(r,cc,ee);
}
return head;
}
void OUT(polynode *head)
{
polynode *p;
p = head->next;
while(p)
{
printf("%fx^%d ",p->coef,p->exp);
p=p->next;
}
printf("\n");
}
polynode * POLYADD(polynode *A,polynode *B)
{
polynode *pa,*pb,*pc;
polynode *C;
polynode *r;
float sum;
C=A;
pa=A->next;
pb=B->next;
pc=C;
while(pa&&pb)
{
if((pa->exp) < (pb->exp))
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else if((pa->exp) > (pb->exp))
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
else
{
sum=pa->coef+pb->coef;
if(sum)
{
pa->coef=sum;
pc->next=pa;
pc=pa;
pa=pa->next;
r=pb;
pb=pb->next;
free(r);
}
else
{
r=pa;
pa=pa->next;
free(r);
r=pb;
pb=pb->next;
free(r);
}
}
}
if(pa)
pc->next=pa;
else
pc->next=pb;
free(B);
return C;
}
一元多项式相加|数据结构
最新推荐文章于 2022-04-18 17:21:25 发布