NSMutableArray实现方式(1)

最近去头条面试遇到的的一个问题:如何实现一个NSMutableArray

当初回答用栈实现,但是不知道如何动态扩展栈空间的大小。

参考了C语言动态数组的实现方式,总算有了答案。

那么我们先来看一下C语言是怎么实现动态数组的

#include 
#include 
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);

以上是C语言的动态数组的实现

在NSMutableArray实现方式(2)会分析

1、C动态数组实现的缺点
2、OC动态数组的实现

你可能感兴趣的:(NSMutableArray实现方式(1))