#include<stdio.h>
#include<stdlib.h>
#define OVER -1
#define OK 1
typedef int Status;
typedef struct Lnode{
int expp,coef;
struct Lnode *next;
}Lnode,*Linklist;
Status Listcreate(Linklist &L,int n)
{
Linklist p,end1;
L=(Linklist)malloc(sizeof(Lnode));
if(!L) exit(OVER);
L->next=NULL;
end1=L;
for(int i=0;i<n;i++)
{
p=(Linklist)malloc(sizeof(Londe));
if(!p) exit(OVER);
scanf("%d%d",&p->coef,&p->expp);
p->next=NULL;
end1->next=p;
end1=p;
}
return OK;
}
Status Listadd(Linklist &La,Linklist &Lb,Linklist &Lc)
{
Linklist pa,pb,pc,pt;
Lc=pa=La;
pa=La->next;
pb=Lb->next;
while(pa&&pb)
{
if(pa->expp<pb->expp)
{
pc->next=pa;pc=pa;pa=pa->next;
}
else if(pa->expp>pb->expp)
{
pc->next=pb;pc=pb;pb=pb->next;
}
else
{
pa->coef=pa->coef+pb->coef;
if(pa->coef)
{
pc->next=pa;pc=pa;pa=pa->next;
pt=pb;pb=pb->next;free(pt);
}
else
{
pt=pa;pa=pa->next;free(pt);
pt=pb;pb=pb->next;free(pt);
}
}
}
pc->next=NULL;
if(pa) pc->next=pa;
if(pb) pc->next=pb;
free(Lb);
return OK;
}
Status Listprint(Linklist L)
{
L=L->next;
while(L)
{
printf("%d %d\n",L->coef,L->expp);
L=L->next;
}
return OK;
}
int main()
{
Linklist La,Lb,Lc;
int n,m;
scanf("%d",&n);
Listcreate(La,n);
scanf("%d",&m);
Listcreate(Lb,m);
Listadd(La,Lb,Lc);
Listprint(Lc);
return 0;
}
数据结构的实验 关于多项式的相加
运行的时候显示问题如下
想知道这是为什么已经如何修改