数组是非常常见且日常工作中十分常用的一种数据结构。
什么是数组
数组是一种线性表数据结构,它用一组连续的内存空间存储一组相同数据类型的数据
数组具有一下特性:
- 连续的内存空间
- O(1)时间复杂度的随机读取
数组支持随机访问的原因是因为可以通过base_address算出目标位置的内存地址
a[i] = base_address + i*data_type_size
因为数组要求内存空间连续,所以导致它的插入或删除动作十分低效,因为要在a[j]数组中的i位置(0<=i<=j)插入一个数据,需要将a[i] - a[j]的数据都往后移动一位(涉及扩容)然后将数据放入a[i]位置(删除类似),所需的平均时间复杂度是O(n)。
常用的优化方式:
插入时(前提是数组无序),会采取将待插入位置的原数据放置数组末尾,然后将待插入数据插入,时间复杂度为O(1)。
删除时(前提是不追求数据连续性),会采取标记删除的方式,将需要删除的数据记录下来,等数组容量不足时再统一删除,这样可以减少多次删除带来的时间损耗,提高删除的效率。
网友评论