首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

顺序表求解解决方案

2013-04-20 
顺序表求解# includestdio.h# define maxsize 100typedef intdatatypetypedef struct {datatype list[m

顺序表求解
# 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);
}



首次答题,给分啊亲

热点排行