顺序表求解
# include<stdio.h>
# define maxsize 100
typedef int datatype;
typedef struct
{
datatype list[maxsize];
int length;
}seqlist;
void intilist(seqlist *l)
{
l->length=0;
}
datatype insertlist(seqlist *l,int i,int j)//
{ int k;
if(i<1||i>l->length+1)
{
printf("不合法");
return 0;
}
else if(l->length==maxsize)
{
printf("顺序表已满");
return 0;
}
else
{ for(k=l->length;k>=i;k--)
l->list[k]=l->list[k-1];
l->list[i-1]=j;
l->length=l->length+1;
return 1;
}
}
void pslist(seqlist a,seqlist b)//就是这个函数调用的时候出来问题
{
int i,j=0,k=0;
seqlist c;
intilist(&c);
for(i=1;j<a.length||k<b.length;++i)
{
if(a.list[j]>b.list[k])
{ insertlist(&c,i,b.list[k]);
++k;
}
else
{ insertlist(&c,i,a.list[j]);
++j;
}
}
while(j<=a.length)
{
insertlist(&c,++i,c.list[j]);
++j;
}
while(k<=b.length)
{
insertlist(&c,++i,c.list[k]);
++k;
}
c.length=a.length+b.length;
printf("输出线性表c中的元素\n");
for(i=0;i<c.length;i++)
printf("%d",c.list[i]);
}
void main()
{ int i,j;
seqlist a,b;
intilist(&a);
intilist(&b);
for(i=1;i<10;i++)
{
if((insertlist(&a,i,i))==0)
{
printf("插入失败");
return;
}
}
for(j=1;j<6;j++)
{
if((insertlist(&b,j,j))==0)
{
printf("error");
return ;
}
}
printf("输出a链表的信息\n");
for(i=0;i<a.length;i++)
printf("%d\t",a.list[i]);
printf("\n");
printf("输出b链表的信息\n");
for(j=0;j<b.length;j++)
printf("%d\t",b.list[j]);
pslist(a,b);//这个函数式讲a,b两个顺序表的内容合并并按非递减的顺序存入c顺序表里,也就是这个函数出来问题
}
[解决办法]
看我的改动。======
# include<stdio.h>
# define maxsize 100
typedef int datatype;
typedef struct
{
datatype list[maxsize];
int length;
}seqlist;
void intilist(seqlist *l)
{
l->length=0;
}
datatype insertlist(seqlist *l,int i,int j)//
{ int k;
if(i<1
[解决办法]
i>l->length+1)
{
printf("不合法");
return 0;
}
else if(l->length==maxsize)
{
printf("顺序表已满");
return 0;
}
else
{ for(k=l->length;k>=i;k--)
l->list[k]=l->list[k-1];
l->list[i-1]=j;
l->length=l->length+1;
return 1;
}
}
void pslist(seqlist a,seqlist b)//就是这个函数调用的时候出来问题
{
int i,j=0,k=0;
seqlist c;
intilist(&c);
for(i=1;j<a.length&&k<b.length;++i)
//Change here
{
if(a.list[j]>b.list[k])
{ insertlist(&c,i,b.list[k]);
++k;
}
else
{ insertlist(&c,i,a.list[j]);
++j;
}
}
while(j<a.length)//Change here
{
insertlist(&c,i++,c.list[j]);//Change here
++j;
}
while(k<b.length)//Change here
{
insertlist(&c,i++,c.list[k]);//Change here
++k;
}
c.length=a.length+b.length;
printf("输出线性表c中的元素\n");
for(i=0;i<c.length;i++)
printf("%d",c.list[i]);
}
void main()
{ int i,j;
seqlist a,b;
intilist(&a);
intilist(&b);
for(i=1;i<10;i++)
{
if((insertlist(&a,i,i))==0)
{
printf("插入失败");
return;
}
}
for(j=1;j<6;j++)
{
if((insertlist(&b,j,j))==0)
{
printf("error");
return ;
}
}
printf("输出a链表的信息\n");
for(i=0;i<a.length;i++)
printf("%d\t",a.list[i]);
printf("\n");
printf("输出b链表的信息\n");
for(j=0;j<b.length;j++)
printf("%d\t",b.list[j]);
pslist(a,b);//这个函数式讲a,b两个顺序表的内容合并并按非递减的顺序存入c顺序表里,也就是这个函数出来问题
}
[解决办法]
逻辑有误,seqlist a.list[maxsize]注意这个成员数组有100个int的长度。虽然a中只有前9个元素被赋值,b中只有前5个元素被赋值,但是后面的元素都是有内容的,编译器一般会将这段的内存初始化一个值,所以函数pslist()的for循环内判断需要改进,修改如下:
# include<stdio.h>
# define maxsize 100
typedef int datatype;
typedef struct
{
datatype list[maxsize];
int length;
}seqlist;
void intilist(seqlist *l)
{
l->length=0;
}
datatype insertlist(seqlist *l,int i,int j)
{ int k;
if(i<1
[解决办法]
i>l->length+1)
{
printf("不合法");
return 0;
}
else if(l->length==maxsize)
{
printf("顺序表已满");
return 0;
}
else
{
for(k=l->length;k>=i;k--)
l->list[k]=l->list[k-1];
l->list[i-1]=j;
l->length=l->length+1;
return 1;
}
}
void pslist(seqlist a,seqlist b)
{
int i,j=0,k=0;
seqlist c;
intilist(&c);
for(i=1;j<a.length&&k<b.length;++i)//&&
{
if(a.list[j]>b.list[k])
{
insertlist(&c,i,b.list[k]);
++k;
}
else if(a.list[j]<=b.list[k])//
{ insertlist(&c,i,a.list[j]);
++j;
}
else//
{}
}
while(j<a.length)//<
{
insertlist(&c,i++,a.list[j]);//a.list[j]
++j;
}
while(k<b.length)//<
{
insertlist(&c,i++,b.list[k]);//b.list[k]
++k;
}
printf("\n输出线性表c中的元素\n");
for(i=0;i<c.length;i++)
printf("%d",c.list[i]);
}
void main()
{
int i,j;
seqlist a,b;
intilist(&a);
intilist(&b);
for(i=1;i<10;i++)
{
if((insertlist(&a,i,i))==0)
{
printf("插入失败");
return;
}
}
for(j=1;j<6;j++)
{
if((insertlist(&b,j,j))==0)
{
printf("error");
return ;
}
}
printf("输出a链表的信息\n");
for(i=0;i<a.length;i++)
printf("%d\t",a.list[i]);
printf("\n");
printf("输出b链表的信息\n");
for(j=0;j<b.length;j++)
printf("%d\t",b.list[j]);
pslist(a,b);
}