NSMutableArray实现方式(1)

最近去头条面试遇到的的一个问题:如何实现一个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);

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

NSMutableArray实现方式(2)会分析

1、C动态数组实现的缺点
2、OC动态数组的实现
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容