数组是数据结构的基本结构形式,它是一种顺序式的结构。java
数组是存储同一类型数据的数据结构,使用数组时须要定义数组的大小和存储数据的数据类型。算法
数组分为一维数组和多维数组,数组的维数由数组下标的个数肯定的。数组
能够说数组是有限个同类型数据元素组成的序列。数据结构
一维数组是指下标的个数只有一个的数组,有时称为向量,是最基本的数据类型。.net
一维数组的数据存储按照顺序存储,逻辑地址和物理地址都是连续的。3d
多维数组是指下标的个数有两个或两个以上。咱们比较经常使用的是二维数组。由于三维一项的数组存储能够简化为二维数组的存储。指针
以二维数组为例,二维数组在顺序存储时通常有两种:blog
矩阵的压缩存储就是存储数组时,尽可能减小存储空间,但数组中每一个元素必须存储。递归
在矩阵中,若是有规律可寻,只要存储其中一部分,而另一部分的存储地址能够经过相应的算法将它计算出来,从而占有较少的存储空间达到存储整个矩阵的目的。队列
矩阵的压缩存储仅能针对特殊矩阵使用,对于没有规律可循的二维数组则不能使用。
二维数组的压缩存储通常分为3种,它们分别是对称矩阵、稀疏矩阵和三角矩阵。
若n阶矩阵A中的元素知足如下条件:aij=aji,i≥1,j≥1,则成为n阶对称矩阵。
对于对称矩阵若是不采用压缩存储,占用的存储单元为n*n个,由于是对称矩阵,因此只要存储对角的数据元素和通常的数据元素便可,占用的存储单元有n*(n-1)/2个。
对角矩阵是指矩阵的全部非零元素都集中在以主对角线为中心的带状区域中,即除了主对角线上和直接在主对角线上、下方若干条对角线上的元素以外,其他元素皆为零。
对稀疏矩阵很难下一个确切的定义,它只是一个凭人们的直觉来理解的概念。
通常认为,一个较大的矩阵中,零元素的个数相对于整个矩阵元素的总个数所占比例较大时,该矩阵就是一个稀疏矩阵。
稀疏矩阵的压缩存储采用三元组的方法实现。其存储规则是每个非零元素占有一行,每行中包含非零元素所在的行号、列号、非零元素的数值。
为完整描述稀疏矩阵,通常在第一行描述矩阵的行数、列数和非零元素的个数。其逻辑描述为(即三元组存储方式):(row col value)其中row表示行号,col表示列号,value表示非零元素的值。 以下图是一种稀疏矩阵的三元组存储形式:
原始数据: 三元组存储形式:
第一行表示矩阵的数据总数:5行、6列、4个值。 第二行表示数据的位置及内容:2行、2列、值为3。 第三行、第四行依次类推。 首先应该将稀疏矩阵转换为三元组存储,而后再利用三元组的存储,实现对矩阵的各类运算。
在Java中,除了一下两点之外,向量与数组彻底相同:
广义表是线性表的扩展,具体定义为n(n≥0)个元素的有限集合。
n的值是广义表的长度,若是n=0称广义表为空表。
广义表的数据元素有两种类型:一个是不可再分的元素(原子元素);一个是能够再分的元素(子表)。
若是全部的元素都是原子元素,则称为线性表。
若是数据元素中含有子表元素,则称为广义表。
广义表通常记做:LS=(a1,a2,……,an)
常见的广义表为:A=()、B=(())、C=(a,b)、D=(A,B,C)、E=(a,E)
广义表中含有元素的个数称为广义表的长度,广义表中含有的括号对数称为广义表的深度。
广义表有三个重要的特色:
广义表的表头是广义表中的第一个元素,而表尾则是去掉表头以后的全部元素。
广义表中一般利用求表头和表尾运算求得广义表中某个元素的值。
广义表的存储方法有不少种,通常采用链表存储。采用链表存储时的结点存储的逻辑结构以下图:
flag表示标志位。当flag为0时,表示该结点为原子元素,info表示原子元素的值;当flag为1时表示该结点为子表,info表示指针,指向该子表的第一个结点。 link表示指针,指向广义表的下一个元素。 例如:广义表A=(a,(b,(c)),(d,e),f),利用链表存储的逻辑图以下:
广义表能够采用多种方式实现,最简单的方法是使用数组实现。
上一篇:队列(queue)
下一篇:树(tree)