n维数组中含有 ∏ i = 1 n b i \prod _ {i = 1} ^ n b_i ∏i=1nbi个数据元素,每个数据元素都受着n个关系的约束
在每个关系中,元素 a j 1 j 2 ⋯ j n ( 0 ≤ j i ≤ b i − 2 ) a _ {j _ 1 j _ 2 \cdots j _ n}(0 \le j _ i \le b _ i - 2) aj1j2⋯jn(0≤ji≤bi−2)都有一个直接后继元素。
因此,就其单个关系而言,这n个关系仍是线性关系。
与线性表一样,所有数据元素都必须属于同一数据类型。
数组一旦被定义,它的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组只有存取元素和修改元素值的操作。
由于数组一般不做插入或删除操作,
因此,我们采用顺序存储结构表示数组。
二维数组可以以列序为主序,也可以以行序为主序。
以行序为主序
L O C ( i , j ) = L O C ( 0 , 0 ) + ( b 2 × i + j ) L LOC(i, j) = LOC(0, 0) + (b_2 \times i + j)L LOC(i,j)=LOC(0,0)+(b2×i+j)L
其中, L O C ( i , j ) LOC(i, j) LOC(i,j)是 a i j a_{ij} aij的存储位置
L O C ( 0 , 0 ) LOC(0, 0) LOC(0,0)是 a 00 a{00} a00的存储位置,即二维数组 A A A的起始存储位置,也称为基地址或基址。
b 2 b_2 b2在以行序为主序的存储结构时为每行存储元素的个数(列数)
由于计算各个元素存储位置的时间相等,所以存取数组中任一元素的时间也相等。
我们称具有这一特点的存储结构为随机存储结构。
在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是零元素。
有时为了节省存储空间,可对这类矩阵进行压缩存储。
所谓压缩存储是指:为多个值相同的元只分配一个存储空间;对零元不分配空间
值相同的元素或者零元素在矩阵中的分布具有一定规律
矩阵中的元满足
a i j = a j i , 1 ≤ i , j ≤ n a_{ij} = a_{ji},1 \le i, j \le n aij=aji,1≤i,j≤n
我们可以存储其下三角(包括对角线)中的元。
所有的非零元都集中在以主对角线为中心的带状区域中。
我们对其可以按照某种原则(或以行为主,或以对角线的顺序)将其压缩存储到一维数组上。
值相同的元素或者零元素在矩阵中的分布不具有一定规律
假设在 m × n m \times n m×n的矩阵中,有 t t t个元素不为零。
令 δ = t m × n \delta = \frac{t}{m \times n} δ=m×nt,称 δ \delta δ为矩阵的稀疏因子
通常认为 δ ≤ 0.05 ( 5 % ) \delta \le 0.05(5\%) δ≤0.05(5%)时称为稀疏矩阵
当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用顺序存储结构来表示三元组的线性表。
为此对这种类型的矩阵,采用链式存储结构表示三元组的线性表更为恰当。
顾名思义,广义表是线性表的推广。
广义表一般记作
L S = ( a 1 , a 2 , ⋯   , a n ) LS = (a_1, a_2, \cdots, a_n) LS=(a1,a2,⋯,an)
其中 L S LS LS是广义表 ( a 1 , a 2 , ⋯   , a n ) (a_1, a_2, \cdots, a_n) (a1,a2,⋯,an)的名称, n n n是它的长度
在线性表的定义中, a i ( 1 ≤ i ≤ n ) a_i(1 \le i \le n) ai(1≤i≤n)只限于是单个元素。
而在广义表的定义中, a i a_i ai可以是单个元素,也可以是广义表,分别称为广义表 L S LS LS的原子和子表
习惯上,用大写字母表示广义表的名称,用小写字母表示原子。
当广义表非空时,称第一个元素 a 1 a_1 a1为 L S LS LS的表头(Head),称其余元素组成的表 ( a 2 , a 3 , ⋯   , a n ) (a_2, a_3, \cdots, a_n) (a2,a3,⋯,an)是 L S LS LS的表尾(Tail)
描述广义表时有用到了广义表的概念
列表的元素可以是子表,而子表的元素还可以是子表
列表可为其他列表所共享
列表可以是一个递归的表,即列表也可以是其本身的一个子表
任何一个非空列表其表头可能是原子,也可能是列表,而其表尾必定为列表
由于广义表中的数据元素可以具有不同的结构,因此通常采用链式存储结构,每个数据元素可用一个结点表示。
由标志域、指示表头的指针域和指示表尾的指针域组成
由标志域和值域构成