!!!!!!!!!要注意下标从几开始!!!!!!!!!
数组(向量)— —常用数据类型
一维数组(向量)是存储于计算机的连续存储空间中的多个具有统一类型的数据元素。
同一数组的不同元素通过不同的下标标识(可以进行随机访问)
二维数组 Amn可视为由m个行向量组成的向量,或由n个列向量组成的向量。
二维数组中的每个元素aij既属于第i行的行向量,又属于第j列的列向量。数组和线性表的关系:数组是线性表的推广。一维数组可以看作是一个线性表;二维数组可以看作元素是线性表的线性表,依此类推。
数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只会有存取元素和修改元素的操作。
以一维数组 A[0···n-1]为例,其存储结构关系式为 LOC(ai) = LOC(a0) + (i) x L(0 <= i < n)
其中,L是每个数组元素所占存储单元。
h2为列下标最大值
---------------------------------------------------------------------------------------------------------------------------------------
压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。其目的是为了节省存储空间。
特殊矩阵:指具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。
常见的特殊矩阵有对称矩阵,上(下)三角矩阵,对角矩阵等。
特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的值相同的多个矩阵元素压缩存储到一个存储空间中。
---------------------------------------------------------------------------------------------------------------------------------------
下三角矩阵的存储方式和对称矩阵类似,不同之处在于除了存储下三角中的元素以外,还要存储对角线上方的常数。
因为是同一个常数,所以只存一个即可。
这样,一共存储了[ n * (n + 1) ] / 2 + 1个元素,将其存入数组s[ n * (n + 1) / 2 ]中,任一元素下表的对应关系为:
k = [ i * ( i + 1) ] / 2 + j ( i >= j )
k = [ n * ( n + 1) ] / 2 ( i < j )---------------------------------------------------------------------------------------------------------------------------------------
三对角矩阵:指除了对角线以及离对角线最近的上下两边两斜行以外的其他元素均为0的矩阵。
同样,为了节省空间,我们只存储对角线及其上下两侧对角线上的元素,主次对角线以外的零元素均不存储。
矩阵第0行和第n-1行只有两个非零元素,其余各行有3个非零元素,总共有3n-2个非零元素。
所以,不在第0行的非零元素aij,它前面有3(i - 1)+2 个非零元素,而在本行中的 j 列前面有j - i + 1个元素,所以元素aij在s中的位置为:k = 2i + j---------------------------------------------------------------------------------------------------------------------------------------
稀疏矩阵:矩阵元素个数 s 相对于矩阵中非零元素个数 t 来说非常多,即s >> t 的矩阵称为稀疏矩阵。
若把稀疏矩阵的三元组线性表按顺序存储结构存储,则称为稀疏矩阵的三元组顺序表。
顺序表中除了存储三元组外,还应该存储矩阵行数,列数和总的非零元素数目,这样才能唯一确定一个矩阵。
例题:首先,我们应该分析m30,30的前面有几个元素。我们可以先看a3,3。
a3,3前面有两行,其中一行为3个元素,一行为2个元素。我们可以类比得出m30,30前面有29行,其中有28行为3个元素,一行为2个元素。再加上m30,30前面有1个元素。
故m30,30前面有(28 * 3)+ 2 + 1 = 87 个元素,即为第88个元素。综上,选D。