多项式加法,不知道哪里有问题,找了很久没找出来
#include<stdio.h>#include<malloc.h>
typedef int ElemType;
typedef struct node{
ElemType exp;
ElemType coef;
struct node *next;
}linklist;
//创建空链表,再主函数里输入数值,
void creat(linklist *s)
{
s=(linklist*)malloc(sizeof(linklist));
s->next=NULL;
}
//删除整个链表
void deletelinklist(linklist *s)
{
linklist *pre,*p=s->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=p->next;
}
free(pre);
}
//插入某一个结点
void insert(linklist *s,ElemType e1,ElemType e2)
{
linklist *p=NULL,*q=NULL;
q=s;
p=(linklist*)malloc(sizeof(linklist));
p->coef=e1;
p->exp=e2;
p->next=q->next;
q->next=p;
}//删除某一个结点
void deletenode(linklist *s,ElemType e1,ElemType e2)
{
linklist *p=s,*q;
q=p->next;
while(p!=NULL && q->coef!=e1 &&q->exp!=e2)
{
p=p->next;
q=q->next;
}
if(q->coef==e1 && q->exp==e2 )
{
p->next=q->next;
free(q);
}
}
//加法
linklist* jiafa(linklist *s1,linklist *s2,linklist *s3)
{
linklist *p=s1,*q=s2,*p3=s3;;
while(p!=NULL&&q!=NULL)
{
if(p->exp<q->exp)
{
insert(s3,p->coef,p->exp);
p=p->next;
}
if(p->exp>q->exp)
{
insert(s3,q->coef,q->exp);
q=q->next;
}
if(p->exp==q->exp)
{
if(p->coef+q->coef==0)
{
p=p->next;
q=q->next;
}
else
{
p->coef=p->coef+q->coef;
insert(s3,p->coef,p->exp);
p=p->next;
q=q->next;
}
}
}
return s3;
}
void print(linklist *s)
{
linklist *p=s;
while(p!=NULL)
{
printf("%d %d",p->coef,p->exp);
p=p->next;
}
}
int main()
{
linklist s1,s2,*s3=NULL;
int n,t,i;
scanf("%d",&n);
creat(&s1);
creat(&s2);
creat(s3);
for(i=0;i<n;i++)
{
while((t=scanf("%d%d",&s1.coef,&s1.exp))==2 && s1.exp>=0 )
{
insert (&s1,s1.coef,s1.exp);
}
while((t=scanf("%d%d",&s2.coef,&s2.exp))==2 && s2.exp>=0 )
{
insert (&s2,s2.coef,s2.exp);
}
s3=jiafa(&s1,&s2,s3);
print(s3);
}
return 0;
}