最近去头条面试遇到的的一个问题:如何实现一个NSMutableArray
当初回答用栈实现,但是不知道如何动态扩展栈空间的大小。
参考了C语言动态数组的实现方式,总算有了答案。
那么我们先来看一下C语言是怎么实现动态数组的
#include <stdio.h>
#include <stdlib.h>
int main(){
int arrLength; // 数组长度
int *array; // 数组指针
int i; // 数组下标
printf("输入数组长度:");
scanf("%d", & arrLength);
// 根据输入长度,在堆中分配长度为arrLength的内存空间
array = (int*)malloc( arrLength*sizeof(int) );
if(!array){
printf("创建数组失败!\n");
exit(1);
}
// 向内存中写入数据
for(i=0; i< arrLength; i++){
array[i] = i+1;
}
// 循环输出数组元素
for(i=0; i< arrLength; i++){
printf("%d ", array[i]);
}
// 需要我们手动释放申请的堆空间
free(array);
return 0;
}
插入元素伪代码:
先判断数组长度是否足够
若足够,则根据下标新增(如array[3] = "A")
若不足,则通过malloc重新申请堆空间B,把旧的数组A元素copy到B中,再插入新元素到B中,并且free(A)
删除元素伪代码:
array[3] = NULL
二维数组实现:
// 分配一个arrLength行,3列的二维数组
array = (int*)malloc( arrLength*sizeof(int) );
for (i=0; i< arrLength; i++)
a[i] = (int *)malloc(sizeof(int)*3);