数组,是日常开发中用到的最多的数据结构之一,说到这里,可能有人就不赞同,“怎么我学的数组不是数据结构呢?”,看完这篇文章,我相信你能够自己判断!
之前,自己一度认为数组太简单了,不就是通过下标拿元素,遍历数组,查找排序等操作。直到看了大佬对数组的介绍,才发觉自己真是坐井观天,对数组的理解太浅显了。
数组专业一点来说是属于“线性表”的一种,它用一组连续的内存空间来存储具有相同类型的数据。
常见的线性表结构有链表、数组、栈、队列,顾名思义线性表就是数据排列在一条线上,每个线性表上的数据最多只有前后两个方向。
非线性表结构则比线性表更复杂,非线性表上的数据并不是简单的前后关系,常见的非线性表数据结构有图、树、堆等。
通过上面的图,我们能明显看到线性表和非线性表的不同之处。线性表只有前后关系,非线性表则存在多种关系。
继续说数组,上面说到来数组是线性表的一种,并且数组是连续的内存空间,相同的数据类型,所以数组有通过下标“随机访问”的特性;
但是这也带来了一些弊端,就是数组是连续的,导致删除和插入的时候为了保证连续性需要进行大量的数据迁移。
数据的访问,那到底数组是怎么通过下标随机访问元素的呢?
拿一个长度为10的int类型数组 int[] a = new int[10]; 计算机会给数组分配连续的内存空间 1000~1039,其中内存首地址为base_address = 1000;