数据结构中两张有序顺序表合并成新的有序顺序表

shaoxy1234 2012-09-09 01:07:31
数据结构中的一个典型问题:两张有序顺序表合并成新的有序顺序表
我的代码如下:
#include<stdio.h>
void main()
{
int i,j;
int k=0;
int a[]={1,2,4,4,7,9}; //a,b均为旧表,c为新表
int b[]={0,1,3,6,8};
int c[20]; //此处取20是为了留足够空间给a,b表合并
for(i=0;i<=5;i++)
{
for(j=0;j<=4;j++)
{
if(a[i]<b[j])
{
c[k]=a[i];
k++;
break;
}
else
{
c[k]=b[j];
k++;
break;
}
}
}
for(i=0;i<=k;i++)
{
printf("%d\n",c[i]); //此处输出C表的数值
}
getchar();
}


但是运行结果为溢出错误,请问这是为什么?请各位高手不吝赐教!拜谢!

...全文
820 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
manxiSafe 2012-09-11
  • 打赏
  • 举报
回复
//数据结构中的一个典型问题:两张有序顺序表合并成新的有序顺序表

#include<stdio.h>
void main()
{
int i, j =0 , p = 0;
int k=0;
int a[]={1,2,4,4,7,9}; //a,b均为旧表,c为新表
int b[]={0,1,3,6,8};
int c[20]; //此处取20是为了留足够空间给a,b表合并
for(i=0;i<9;i++)
{
if((a[j]<b[p])&&(j<6))
{
c[k] = a[j];
k++;
j++;
}
if((a[j]>=b[p])&&(p<5))
{
c[k] = b[p];
k++;
p++;
}
}
while(j<6)
{
c[k] = a[j];
k++;
j++;
}



for(i=0;i<k;i++)
{
printf("%d\n",c[i]); //此处输出C表的数值
}
getchar();
}





这个代码可以了,但是如果改动数组的话 j,p相关处就得改动
AndyZhang 2012-09-10
  • 打赏
  • 举报
回复
lz两重循环有问题啊,比如说第一个数组中1小于第二个数组中的所有数,那你要把第二个数组保存到c里面。然后第一个数组第二个数又小于后面的所有数,你又会保存遍。

楼上代码应该可行。这个代码不难,lz需要我可以写一个,不过推荐lz自己想想,应该很好写
xmu_才盛 2012-09-09
  • 打赏
  • 举报
回复
都有双双有序, 还要嵌套循环吗?

szArrayA, szArrayB, nSizeA, nSizeB;
int i = 0, j = 0, k = 0;
for(; i < nSizeA && j < nSizeB; k ++)
{
if(szArrayA[i] >= szArrayB[j])
{
tmp = szArrayA[i ++];
}
else
{
tmp = szArrayB[j ++];
}

C[k] = tmp;
}

// 最后谁没完将谁的数据拷贝到c后面
int* pTmp = NULL;
int nBegin = 0, nEnd = 0;
if(i < nSizeA) // A没完
{
pTmp = szArrayA;
nBegin = i;
nEnd = nSizeA;
}
else // B没完
{
pTmp = szArrayB;
nBegin = j;
nEnd = nSizeB;
}

for(; nBegin < nEnd; nBegin ++)
{
C[k ++] = pTmp[nBegin];
}
}

}




我随手写的代码,直接在这个输入框写的, 代码正确性没验证, 不过逻辑觉得没问题。
shaoxy1234 2012-09-09
  • 打赏
  • 举报
回复
我用break就是为了每次比较之后就跳出内嵌的for循环,这样可以这样跟while(){}这种算法差不多吧,只是时间复杂度高一个数量级
羽飞 2012-09-09
  • 打赏
  • 举报
回复
for(i=0;i<=5;i++) //也不用for循环,或者不应该每次都做i++与j++,楼主好好看下教材
{
for(j=0;j<=4;j++) //为什么让b在a的循环里面?这样a与b就不是并行比较了
{
if(a[i]<b[j])
{
c[k]=a[i];
k++;
break; //这里不用break;吧
}
else
{
c[k]=b[j];
k++;
break;
}
}
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧