写了将两个链表的简单运用都错误。。
最近在学数据结构,可是在两个链表的合并和一元多项式的合并出现段错误。。。。。
下面附两个一元多项式的合并代码 大家帮忙看下。。。。
break;
case 0:
qa->data.coef+=qb->data.coef;
if(qa->data.coef==0)
{
u=qa;
v=qb;
qa=qa->next;
qb=qb->next;
free(u);
free(v);
}
else
{
p->next=qa;
p=qa;
v=qb;
qa=qa->next;
qb=qb->next;
free(v);
}
break;
case 1:
p->next=qb;
p=qb;
qb=qb->next;
break;
}
}
if(p=qa)
p->next=qa;
if(p=qb)
p->next=qb;
free(Lb);
}
int main()
{
LinkListpoly *La,*Lc,*Lb;
La=Creatlistpoly();
printf("第一个一元多项式的系数是:\n");
OutputLinkListpoly(La);
Lb=Creatlistpoly();
printf("第二个一元多项式的系数是:\n");
OutputLinkListpoly(Lb);
AddLinkListpoly(La,Lb,Lc);
printf("合并后的一元多项式是:\n");
OutputLinkListpoly(Lc);
system("pause");
}
[解决办法]
if(p=qa)
p->next=qa;
if(p=qb)
p->next=qb;
改为:
if(p==qa)
p->next=qa;
if(p==qb)
p->next=qb;
[解决办法]
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
typedef struct
{
float coef; // 系数
int expn; //指数
}term,ElemType;
typedef struct node
{
ElemType data;
struct node *next;
}LinkListpoly;
LinkListpoly *Creatlistpoly() //创建一个一元多项式链表
{
int x;
float c;
LinkListpoly *head,*rear,*L;
head=(LinkListpoly *)malloc(sizeof(LinkListpoly));
head->next=NULL;
rear=head;
printf("请输入一元多项式的指数和系数,结束请输入两个0");
while(1)
{
scanf("%d%f",&x,&c);
if(!x) break;
L=(LinkListpoly *)malloc(sizeof(LinkListpoly));
L->data.coef=c;
L->data.expn=x;
L->next=rear->next;
rear->next=L;
rear=L;
}
rear->next=NULL;
return head;
}
void OutputLinkListpoly(LinkListpoly *L) //对一个一元多项式的系数和指数输出
{
LinkListpoly *p;
p=L->next;
printf("指数 系数\n");
while(p)
{
printf("%2d %2.2f\n",p->data.expn,p->data.coef);
p=p->next;
}
}
int compare(int a,int b)
{
int c;
if(a==b) c=0;
else
if(a>b) c=1;
else
if(a<b) c=-1;
return c;
}
void AddLinkListpoly(LinkListpoly *La,LinkListpoly *Lb,LinkListpoly *Lc) //将两个一元多项式合并
{
LinkListpoly *p,*qa,*qb,*u,*v;
int a,b;
Lc=p=La;
qa=La->next;
qb=Lb->next;
while(qa&&qb)
{
a=qa->data.expn;
b=qb->data.expn;
switch(compare(a,b))
{
case -1:
p->next=qa;
p=qa;
qa=qa->next;
break;
case 0:
qa->data.coef+=qb->data.coef;
if(qa->data.coef==0)
{
u=qa;
v=qb;
qa=qa->next;
qb=qb->next;
free(u);
free(v);
}
else
{
p->next=qa;
p=qa;
v=qb;
qa=qa->next;
qb=qb->next;
free(v);
}
break;
case 1:
p->next=qb;
p=qb;
qb=qb->next;
break;
}
}
if(p==qa)
p->next=qa;
if(p==qb)
p->next=qb;
free(Lb);
}
int main()
{
LinkListpoly *La,*Lb,*Lc = (LinkListpoly *)malloc(sizeof(LinkListpoly));
La=Creatlistpoly();
printf("第一个一元多项式的系数是:\n");
OutputLinkListpoly(La);
Lb=Creatlistpoly();
printf("第二个一元多项式的系数是:\n");
OutputLinkListpoly(Lb);
AddLinkListpoly(La,Lb,Lc);
printf("合并后的一元多项式是:\n");
OutputLinkListpoly(Lc);
system("pause");
}