引出: Problem 1073 -合并有序数组 给你两个有序数组,输出合并后的有序数组。
注1:本题的有序指的是非降序。 注2:不需要合并相同元素。 注3:本题不应使用排序算法。 Input 首先一个数N,表示有N组数据(1<= N <= 100) 每组数据分两行,每行表示一个数组,开头一个整数X(1 <= X <= 1000000)表示数组元素数量,跟着X个整数。 Output 每组数据输出一行,逐个输出合并后的有序数组。 Sample Input 1 3 2 7 8 3 3 5 9 Sample Output 2 3 5 7 8 9
在很多情况下,需要我们使用malloc来动态的分配需要的内存。
ElemType *data=(ElemType*)malloc(sizeof(ElemType)*n); //分配一个大小为n的ElemType类型的数组, //返回指向该分配区域的开头位置的指针data。当只有一组数据的时候,压根就不需要记录长度,因为我们知道为n; 当有多组数据的时候,也就是用malloc申请了二维数组 而且所申请的数组二维上并不是等长的,如
data[i][0]={1}; data[i][1]={1,2,3,4}; data[i][2]={1,2,3}; data[i][3]={1,2,3,4,4,5,7};如何记录每组数组长度呢?
//malloc创建二维数组 ElemType **data=(ElemType**)malloc(sizeof(ElemType)*n)//用二级指针动态申请二维数组 for(i=0;i<n;i++) data[i]=(ElemType*)malloc(sizeof(ElemType)*i);//data[i]的数组大小也在变化。一般我们使用sizeof(数组名)/sizeof(元素类型)=数组元素个数,但动态分配后的数组长度bytes 无法用sizeof(data[i])/sizeof(data[i][0])得到准确结果,也就是动态malloc分配的sizeof不适用了。 最简单的方法 【0】_msize()函数 取得malloc()分配的空间大小 _msize(data[i])/sizeof(data[i][0]); ★注意:_msize(data[i])读取的是字节byte数,需要/sizeof(ElemType) 才能得到元素个数。且该函数为Windows独有,UNIX没有对应的函数★ 【1】 定义一个数组,记录长度 int len[n]; len[i]={data[i]的数组元素个数}; 每次创建时写入,改变时修改; 读取也算方便; 【2】 每个data[i][0]空出,用来记录数组长度。data[i][0]={data[i]的数组元素个数}; 【3】 使用结构体。结构体保存长度;
struct DD{ ElemType *p;//用来记录二维的起始位置; int count;//保存元素个数; }; DD *data=(DD *)malloc(sizeof(DD)*n); for(int i=0;i<n;i++) { data[i].p=(ElemType *)malloc(sizeof(ElemType)*i);//可以进行data[i].p[i]的使用 data[i].count=i; }