想问下动态数组的问题,要两个有序的数组合成一个,一次性完成。
#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;
}
realloc()会调整你以前使用malloc()函数申请的内存,realloc()会先检查用malloc()函数申请的内存空间的地址起始开始是否有连续的空间满足
你要调整的空间大小,如果没有,就会重新开辟一块,然后把以前的数据拷贝过去,然后释放malloc()所申请内存空间的指针。但是如果你调整的小于malloc()申请的内存空间时,有可能会造成数据丢失。
还有你的程序中,你要的是两个整型数组,为什么还要在数组结尾加‘\0'?又不是字符数组。要两个有序数组合并成一个有序数组,你可以看看归并排序的实现,很相似。
数组合并的算法网上很多,realloc是调整大小,不会影响原有数据,当然分配地址可能会改变
realloc的策略是,如果能放下,就扩展数组,否则就再开辟一块整体搬动过去。