4.数组
4.1 数组的定义
数组是由n个相同数据类型的数据元素构成的有限序列,每个元素成为一个数组元素,每个元素在n个线性关系中的序号成为数组下标,下标的取值范围成为数组的维界。
数组与线性表的关系:数组是线性表的推广。以为数组可以视为一个线性表;二维数组可视为其元素也是定长线性表的线性表。以此类推。数组一旦被定义,其维数就不再改变。因此,除结构的初始化和销毁外,数组只会存取元素和修改元素的操作。
4.2数组的存储结构
- 一维数组:LOC(a[i]) = LOC(a[0]) + i * L(0≤i<n)
- 二维数组:设行下表与列下标的范围分别为[0,h1]和[0,h2]。
- 行优先:LOC(a[i][j]) = LOC(a[0][0]) + [i * (h2 +1) +j] *L
- 列优先:LOC(a[i][j]) = LOC(a[0][0]) + [j * (h1 +1) +i] *L
4.3特殊矩阵的压缩存储
4.3.1 对称矩阵
对于一个n阶方阵,可以划分为上三角区、主对角线和下三角区。
对于n阶对称矩阵,上三角区的所有元素与下三角区的对应元素相同,若仍采用二维数组存放,会浪费一半空间,为此,将对称矩阵A[1...n][1...n]存放到B[n(n+1)/2]中。只存放下三角部分和主对角线的元素。
元素下标之间的对应关系:略。
4.3.2 三角矩阵
三角矩阵存储思想与堆成矩阵类似,矩阵A[1...n][1...n]存放到B[n(n+1)/2]中。
4.3.3三对角矩阵
三对角矩阵也称为袋装矩阵,所有非零元素都集中在主对角线为中三条对角线的区域,其他元素都为0。
对应关系:
- 矩阵A中3条对角线上的元素a[i][j]对应的一维数组B中的下标为k = 2i + j - 3。
- 反之,若已知B中的第k个位置,可得i = (k + 1)/3 + 1(向下取整)。j = k - 2i +3。
4.4 稀疏矩阵的三元组表示以及运算处理方法
将非零元素及其行和列构成一个三元组(行标、列标、值)。稀疏矩阵压缩存储后便失去了随机存取特性。稀疏矩阵的三元组可以采用数组存储,也可以采用十字链表法存储。
4.5 广义表的概念
广义表的元素可以是单个元素,也可以是广义表,分别称为原子和子表。任何一个非空列表,其表头可能是原子,也可能是列表,而表尾必定是列表。常采用链式存储结构。

浙公网安备 33010602011771号