数组的顺序存储
一维数组的每个元素由一个值和下标确定 对C语言来说 a[0]……a[t-1]是一个有序数列,令s = sizeof(datatype) ,表示一个数组占用的储存单元个数
元素a[0] 地址 &a[0] 地址计算公式 &a[i] = &a[0] + i×s
二维数组表示 但本质上还是拿一段连续的内存来表示
于是我么不难得到地址公式 &a[i][j] = &a[0][0] + (i×t + j)s
三维数组依次类推 &a[i][j][k] = &a[0][0][0] + (i×s2×s3 + j×s3)s
三角矩阵 为了省空间,我们不开n×n的数组,只开n(n-1)/2
&a[i][j] = a[0][0] + [(i(i+1))/2 + j ]s
带状矩阵 在存贮带状矩阵时,对于带状区域外的元素,即满足li-j I >b 的 a;i不存贮,而只存贮带 状区域内的(2b+l)n-b(b+ 1)个元素。为了使地址计算公式简单,通常并不是把这些元素
顺序地存贮在连续的(2b+ l)n-b (b+ 1)个存贮单元中,而是按如下方法存贮:除头一行和 最后一行外,每行都当作有(2b+1)个元素,将带状矩阵按行序列序存贮在 (2b+l )n-2b个 存贮单元中。 按照这种方法存贮,多花费掉 b(b-1)个存贮单元,这些空留的b(b-1)个存 贮单元,我们决不会进行存取。 图4. 1. 7 给出半带宽为 3 的 6 阶带状矩阵。矩阵外的CD,…,? 是为了补足每行均有七个元素,头一行和最后一行不用增补。增补的元素仅占用存贮单元, 我们决不会对它进行存取。按照上述的顺序存贮方法,图4. 1, 7 中的元素是按如下的次序进 行顺序存贮:
稀疏矩阵
利用三元组来进行矩阵表示 struct dot { x, y, data } 这样我们可以用链表来把矩阵来表示出来,在大部分都是0的数组中可以减少空间损耗
|