美文网首页
NSMutableArray实现方式(1)

NSMutableArray实现方式(1)

作者: zhong_JF | 来源:发表于2019-05-22 12:06 被阅读0次

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

    相关文章

      网友评论

          本文标题:NSMutableArray实现方式(1)

          本文链接:https://www.haomeiwen.com/subject/lijyzqtx.html