NeQrhk 2015-04-10 04:20 采纳率: 30.6%
浏览 2768
已采纳

c语动态数组 的问题 把两个有序的数组合成一个数组

想问下动态数组的问题,要两个有序的数组合成一个,一次性完成。
#include stidio.h
int main()
{
int *a;//是不是这里用指针,等下就可以用realloc了。
int *b;
int i=0,j=0,k;
printf ("请输入第一个数组:\n");

 while (  scanf("%d",&a[i])==1&&a[i]!='\n')
 {
     i++;
 }
 a[i]='\0';
 printf ("输入第二个数组:\n");
 while (scanf("%d",&b[j])==1&&b[i]!='\n')
 {
     j++;
 }
 b[i]='\0';
 j--;
 k=i+j;
 a=(int *)realloc(a,k*sizeof(int));//用realloc 怎么扩充之前的数组同时又
 i=0;不覆盖之前的数组?
 j=0;
 while (i<k)
 {
     while (a[i]!='\0'&&b[j]!='\0')
     {
         if(a[i]<b[j])
         {
             i++;
         }
         else if(a[i]>b[j])
         {
             a[i++]=b[j++];
         }
         else 
         {
             i++;
             j++;
         }
     }
     while (a[i]!='\0')
     {
         i++;
     }
     while(b[j]!='\0')
     {
         a[i++]=b[j++];
     }
 }
     i=0;
     while (a[i]!='\0')
     printf ("%d",a[i]);
     return 0;

}

  • 写回答

3条回答 默认 最新

  • bullzerone 2015-04-10 10:19
    关注

    realloc()会调整你以前使用malloc()函数申请的内存,realloc()会先检查用malloc()函数申请的内存空间的地址起始开始是否有连续的空间满足
    你要调整的空间大小,如果没有,就会重新开辟一块,然后把以前的数据拷贝过去,然后释放malloc()所申请内存空间的指针。但是如果你调整的小于malloc()申请的内存空间时,有可能会造成数据丢失。

    还有你的程序中,你要的是两个整型数组,为什么还要在数组结尾加‘\0'?又不是字符数组。要两个有序数组合并成一个有序数组,你可以看看归并排序的实现,很相似。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型