读书人

写了将两个链表的简单运用都异常。

发布时间: 2013-04-09 16:45:09 作者: rapoo

写了将两个链表的简单运用都错误。。
最近在学数据结构,可是在两个链表的合并和一元多项式的合并出现段错误。。。。。
下面附两个一元多项式的合并代码 大家帮忙看下。。。。


# 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,*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;

[解决办法]

引用:
引用: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");
}




[解决办法]
引用:
引用:C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384……

你的问题应该是出在add那一块,仔细找找

读书人网 >C语言

热点推荐