数组

  • 数组也是呈线性排列的一种数据结构。在数组中访问数据非常简单,但是添加和删除数据比较耗时间。

 

  • a是数组的名字,后面[]中的数字表示该数据是数组中的第几个数据(这个数字是数组的下标,下标从0开始计数)。比如Red就是数组a的第2个数据。
  • Blue、Yellow、Red作为数据都存储在数组中。

1、存储方式。数据按照顺序存储在连续的空间内。由于数据是存储在连续空间的,所以每个数据的内存地址(在内存上的位置)都可以通过数组下标算出来,也可以通过这个直接访问目标数据(随机访问)。

2、访问数据。例如想要访问Red,如果使用指针只能从头开始查找,但是在数组中,只需要指定a[2]就能直接访问Red。

3、添加数据。如果想要在任意位置上添加或删除数据,数组的操作就比链表复杂多了。例如将Green添加到第2个位置上。

首先,需要在数据的尾部确保需要增加的存储空间。

为了给新的数据腾空间,需要把已有的数据一个个的移开,首先将Red往后移动。

 然后将Yellow往后移动

 最后在空出来的位置写入Green。

添加数据操作就完成了。

 4、删除数据。如果要删除Green,首先删除目标数据Green

 然后把后面的数据一个个的往空位移动,先把Yellow往前移动。

 接下来移动Red。

最后删除多余的空间,现在Green就被删除了。

  • 假设数组中有n个数据,由于访问数据时使用的时随机访问(可通过下标计算内存地址),所以需要运行时间为恒定的,即O(1)。
  • 但是如果想要从数组中添加新数据,必须把目标位置后面的数据一个个移开。如果想在数组头部添加数据,需要O(n)的时间,删除操作也是需要O(n)。
欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/14460988.html