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条)

报告相同问题?

悬赏问题

  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码