您的位置:首页 > 理论基础 > 数据结构算法

1467 数据结构:一元多项式加法

2016-04-01 19:26 561 查看

数据结构:一元多项式加法

Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByte

Description



给定2个一元多项式,计算它们的和。例如:f(x)=5x3-3x2+1和g(x)=3x4+3x2+x,则h(x)=f(x)+g(x)=3x4+5x3+x+1。

Input

只有一个测试案例,输入包括2行。

第1行为多项式f(x)的项数n和n项的系数和次方(按照次方从大到小)。第2行为多项式g(x)的项数m和m项的系数和次方(按照次方从大到小)。

其中:0<m,n<100

Output

多项式h(x)每项的系数和次方(按照次方从大到小)。

Sample Input

3 5 3 -3 2 1 0

3 3 4 3 2 1 1

Sample Output

3 4 5 3 1 1 1 0

AC代码:

#include<stdlib.h>
typedef struct term
{
int coef;
int expn;
}term;
typedef struct LNode
{
term data;
struct  LNode *next;
}LNode,*Polynomial;

int equal(int e1,int e2){

if(e1==e2) return 1;
return 0;
}

int LocateElem(Polynomial p1,Polynomial r1,int (*cmp)(int,int))
{
Polynomial q;
q=p1->next;
while(q)
{
if((*cmp)((q->data).expn,(r1->data).expn))
break;
q=q->next;
}
if(q)
{
(q->data).coef=(r1->data).coef+(q->data).coef;

return 1;
}
else
return 0;
}

void Inpolyn(Polynomial &p,Polynomial &r)
{

Polynomial q;
q=p;
while(q->next&&(q->next->data).expn>(r->data).expn)
q=q->next;
r->next=q->next;
q->next=r;
}

void CreatPolyn(Polynomial &p,int m)
{
p=(Polynomial)malloc(sizeof(LNode));

(p->data).coef=0;
(p->data).expn=-1;
p->next=NULL;
Polynomial r,q;
q=p;
int i;
for(i=1;i<=m;i++)
{
r=(Polynomial)malloc(sizeof(LNode));
scanf("%d%d",&(r->data).coef,&(r->data).expn);
if(!LocateElem(p,r,equal))
Inpolyn(p,r);
}
}
void AddPolyn(Polynomial &pa,Polynomial &pb,Polynomial &pc){

pc=(Polynomial)malloc(sizeof(LNode));

(pc->data).coef=0;(pc->data).expn=-1;pc->next=NULL;

Polynomial p1,p2,p3,de;
p1=pa->next;
p2=pb->next;
p3=pc;
free(pa);free(pb);
while(p1&&p2)
{
if((p1->data).expn==(p2->data).expn)
{
(p1->data).coef+=(p2->data).coef;

if((p1->data).coef)
{

p3->next=p1;

p3=p1;
p1=p1->next;
de=p2;

p2=p2->next;
free(de);
}
else
{
de=p1;
p1=p1->next;
free(de);
de=p2;
p2=p2->next;
free(de);
}
}
else if((p1->data).expn>(p2->data).expn)
{
p3->next=p1;
p3=p1;
p1=p1->next;
}
else
{
p3->next=p2;
p3=p2;
p2=p2->next;
}
}
if(p1)
p3->next=p1;
if(p2)
p3->next=p2;
}
int main()
{
Polynomial  ha,hb,hc,th;
int t1,t2;

scanf("%d",&t1);
CreatPolyn(ha,t1);
scanf("%d",&t2);
CreatPolyn(hb,t2);
AddPolyn(ha,hb,hc);
th=hc->next;

while(th->next)
{
printf("%d %d ",(th->data).coef,(th->data).expn);
th=th->next;
}
printf("%d %d\n",(th->data).coef,(th->data).expn);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: