数组的性质

数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据 。

线性表:线性表就是一种排列成一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。除了数组,链表、队列、栈等也是线性结构。
线表.jpg

与之对应是非线性表,二叉树、堆、图等。之间的关系不是简单的前后关系。
非线表.jpg
连线的内存空间和相同的类型数据。
好处:随机访问
坏处:删除、插入为保证数据的连续性,需要大量的数据搬移工作。
数组支持随机访问,根据下标访问的时间复杂度为O(1)

数组的访问

  1. //a[i]_adress 要访问的数据地址
  2. //base_address 数组开始地址
  3. //i数组下标, data_type_size每一个存储的数据类型的大小
  4. a[i]_adress = base_address + i * data_type_szie

为什么数组下标要从0开始

  1. // 假设不从0开始,从1开始
  2. a[i]_adress = base_address + (i-1)* data_type_szie
  3. // 每次多了(i-1)计算,加大计算复杂度,浪费在计算资源

警惕数组访问越界问题

针对此问题很多语言提供了容器类。在python中没有数组结构,list列表代替更加灵活。但占用资源较大。
numpy库高效实现了数组结构。