数组的定义:由连续整数标号的相同元素组成的连续存储空间。
数组的特点:(随机存储)
读时间复杂度为常数
写时间复杂度为常数
在任意位置位置添加或者删除的时间复杂度是线性的
读写的时间复杂读为常数的原因:编译器可以直接通过运算获得索引对应元素的地址。
一维数组:a[i]的地址为:
&a[1] = array_addr + elem_size * (i - first_index)
二维数组:a[i][j] 的地址:
&a[i][j] = array_addr + elem_size * ((i - first_row_index )* row + (j - first_col_index)
多维数组的分类:
行优先顺序
列优先顺序
数组操作的时间复杂度
添加 | 删除 | 读写 | |
---|---|---|---|
开始 | O(n) | O(n) | O(1) |
末尾 | O(1) | O(1) | O(1) |
中间 | O(n) | O(n) | O(1) |