数组介绍
什么是数组? 数组是一种线性表数据结构,它用一组连续的的内存空间,来存储一组具有相同类型的数据。 数组如何实现随机访问? 基于数组的两大特性:线性表结构和连续的内存空间和相同类型的数据,使得数组可以通过下标直接访问数组元素,从而具有“随机访问”的特性。 具体实现方法: 当计算机需要随机访问数组中的某个元素时,通过寻址公式计算出该元素存储的内存地址,寻址公式如下所示: a[i]_address = base_address + i * data_type_size 其中 i 为数组元素的下标(从0开始),data_type_size 表示数组中每个元素的大小,假如数组中存储的是 int 类型数据,那么 data_type_size 就为4个字节。 数组查找的时间复杂度 根据下标随机访问的时间复杂度为 O(1)。 注意:前提条件是根据下标进行的随机访问,如果是在下标不确定的情况下查找某个元素,那么即便是已经排好序的数组,你用二分查找,时间复杂度也是 O(logn)。 低效的“插入”和“删除” 数组为了保持内存数据的连续性,会导致插入、删除操作比较低效,具体是为什么呢? 插入操作 每当在数组中插入一个新元素的时候,为了给这个新插入的元素挪出一个位置,我们可能需要移动大量的元素。 假设数组的长度为 n,如果在数组的末尾插入元素,那就不需要移动数组了,所以最好时间复杂度为 O(1)