数组
数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。 这些无序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
数组是在内存中存储相同数据类型的连续的空间,声明一个数组就是在内存空间中划出一串连续的空间
数组的使用
数组长度一旦声明,不可改变不可追加。数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。
声明数组:
String str[]=new String[]{"a","b","c","d","e"}; //String 类型
int arr[]=new int[13];//int 类型 定义一个长度为13的数组
优缺点:
-
优点
支持随机访问: 数组存于连续的地址空间,并且存储的是相同类型的数据,这使得数组可以通过下标与数据类型的大小直接定位到数据位置。 -
缺点
插入效率低,因为数组要保证插入后数据的连续性,需要将插入位置后面的数据依次向后进行移动,所以插入的效率很低。插入时最好的情况是在数组末尾插入,时间复杂度为O(1);最坏的情况是在数组起始位置插入,时间复杂度为O(n);插入的平均时间复杂度为 (1+2+…+n)/n = O(n)。
广义表
广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。它被广泛的应用于人工智能等领域的表处理语言LISP语言中。
广义表的定义如下:
它是n(n>0)个数据元素a0,a1,……,an-1组成的有限序列,记为GList=(a0,a1,……,an-1),其中,ai(0<=i<n)是原子或子广义表,原子是不可分解的数据元素。
具体介绍可查看这篇文章:https://blog.csdn.net/wobushixiaobailian/article/details/80390847
广义表的数据结构:
广义表节点(data数据域,child子表地址域,next后继结点地址域)
举例:已知三个有名广义表
L(a,b)
T(c,L(a,b))
G(d,L(a,b),T(c,L(a,b)))
G的存储结构如下:
为什么需要头节点?便于在表头增加删除结点。如果不要头结点,那么对广义表的表头添加删除,将可能影响其他广义表中元素。比如,上面G的存储结构改为不要头结点的方式。如下:
如果此时通过G访问子表L并删除L中的第一个结点a后,G中L结点的child指向原a结点的后继结点b。而这样的删除并没有影响到T表中的L结点的child域。如下: