- 数组为什么是从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,相当于多做一次减法
- 数组越界问题(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,循环继续。
- 随机读取O(1)
- 插入数据
一般情况 插入末尾最好是O(1),插入头要最差是O(n),平均情况(1+2+...+n)/n=O(n) - 删除数据
一般情况也是类似插入
网友评论