数组

作者: dingking | 来源:发表于2020-09-24 11:20 被阅读0次
    1. 数组为什么是从0开始
      数组是申请连续的空间 通过随机读取可以得到结果
    int a[] = {1,2,3}
    

    上面示例数组假设baseaddr 1001 每一项占用1 则 1001 1002 1003 这样的排列
    随机读取的公式是 a[i] = baseaddr+itype_size
    读取a[1] 公式套入 a[1] = 1001+1x1=1002
    如果是1开始就需要a[i] = baseaddr+(i-1)
    type_size,相当于多做一次减法

    1. 数组越界问题(java语言有检测机制)
    i=0;
    arr[3]={0}
    for(;i<=3;i++){
      arr[i]=0
      print("test")
    }
    

    上面代码i<=3则处理,会出现死循环,变量入栈是高位到低位,可以知道栈数据
    x0001 a[0]
    x0002 a[1]
    x0003 a[2]
    x0004 i=0
    当arr[3]时刚好对应计算可以得到 x0001+3*1=x0004,刚好是i的值 ,arr[3]=0,就是把i设置为0,循环继续。

    1. 随机读取O(1)
    2. 插入数据
      一般情况 插入末尾最好是O(1),插入头要最差是O(n),平均情况(1+2+...+n)/n=O(n)
    3. 删除数据
      一般情况也是类似插入

    相关文章

      网友评论

          本文标题:数组

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