基础数据结构之数组

提到数组大家肯定不陌生,平时编码中都用用到,但是有没有想过数组在内存中是如何存储、如何访问。

数组是什么

下面我用专业术语解释一下,数组(Array)是一种线性表数据结构,它用一种连续的内存空间,来存储一组具有相同类型的数据。

从上面的专业解释中不难看到几个关键字

线性表:顾名思义就是像一条线一样排列的结构,每个线性表上的数据最多只有前和后两个方向。

连续内存空间和相同数据类型。

正是因为这两个限制,它才有了堪称杀手锏的特性“随机访问”。

数据访问

计算机会给每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。


如上图,计算机给a数组分配了一块连续内存空间1000-1023,其中内存首地址是base_address=1000。

根据寻址公式我们可以得出当前数组存储的内存地址:

a[i]_address = base_address + i * date_type_size;

其中date_type_size表示每个元素的大小,a数组中存储 的是int类型,所以date_type_size为4个字节。

数组的“插入”和“删除”

假如数组a的长度为10,当前存储了5个元素,如果第五个元素之后追加,则不会造成数据的迁移,如果是在第三个位置插入新元素,那么插入过程中就会把第三位置及之后的数据都往后迁移,

删除数组的数据也是同理。

数组插入性能优化,如果数组中的数据是无序的,那么插入数据的时候尽量往最后一个元素后追加,这样不用进行数据的迁移,如果是有序的那就只能进行数据迁移

删除的性能优化,删除时可以先把相关的元素打删除标记,直到数组没有更多的存储空间时再将要删除的数据统一删除,这样就减少了数据删除导致的迁移。

你可能感兴趣的:(基础数据结构之数组)