数据结构与算法--数组

04 数组

4.1 数组的定义和特点

矩阵可以看做是特殊的线性表,即线性表元素本身又是一个线性表(将整行(列)看做成一个元素,而这个元素本身也是线性表)。

4.2 数组的顺序存储结构

按行(或列)序依次存储各个元素。

4.3 矩阵的压缩存储

对一些阶数很高、而又有很多零元素的矩阵,可采用压缩存储的方式,也就是仅存储非零元素,相同元素仅存储一个。压缩存储后,若能得到各元素的地址,则可进行随机存取。(这里均按行序存储)

4.3.1 特殊矩阵的压缩存储

特殊矩阵包括对称矩阵、三角矩阵、对角矩阵。

(1)对阵矩阵

也就是沿主对角线,两侧对称元素相等,即 a i j = a j i a_{ij}=a_{ji} aij=aji。那么一共需存储 ( 1 + n ) n 2 \frac{(1+n)n}{2} 2(1+n)n 个元素。以按下三角存储为例:

L o c ( a i j ) = L o c ( a 11 ) + ( i ( i − 1 ) 2 + j − 1 ) ∗ L , ( i > = j ) (按行序,下三角存储) L o c ( a i j ) = L o c ( a 11 ) + ( j ( j − 1 ) 2 + i − 1 ) ∗ L , ( i < j ) (按列序,上三角存储) \mathrm{Loc(a_{ij})}=\mathrm{Loc(a_{11})+(\frac{i(i-1)}{2}+j-1)*L}, \quad \mathrm{(i>=j)} (按行序,下三角存储) \\ \mathrm{Loc(a_{ij})}=\mathrm{Loc(a_{11})+(\frac{j(j-1)}{2}+i-1)*L}, \quad \mathrm{(i<j)} (按列序,上三角存储) Loc(aij)=Loc(a11)+(2i(i1)+j1)L,(i>=j)(按行序,下三角存储)Loc(aij)=Loc(a11)+(2j(j1)+i1)L,(i<j)(按列序,上三角存储)

(2)三角矩阵

以下三角矩阵为例(也就是上三角部分都为零):

L o c ( a i j ) = L o c ( a 11 ) + ( i ( i − 1 ) 2 + j − 1 ) ∗ L , ( i > = j ) \mathrm{Loc(a_{ij})}=\mathrm{Loc(a_{11})+(\frac{i(i-1)}{2}+j-1)*L}, \quad \mathrm{(i>=j)} Loc(aij)=Loc(a11)+(2i(i1)+j1)L,(i>=j)

(3)对角矩阵

4.3.2 稀疏矩阵

稀疏矩阵是指非零元素较少,且分布没有一定规律的矩阵。压缩存储时,只需储存行、列下标和元素值以及矩阵维数即可。例如矩阵 M \mathrm{M} M 可由 ( i , j , v a l u e ) . . . \mathrm{(i, j, value)}... (i,j,value)... 和维数 ( m , n ) \mathrm{(m, n)} (m,n) 唯一确定。

1、稀疏矩阵的顺序存储

(1)三元组表法

定义一个三元组 ( i , j , e ) \mathrm{(i, j, e)} (i,j,e)

typedef struct
{
    int i, j;        // 非零元的下标
    ElemType e;      // 非零元的值
}Triple;

将各个三元组一次存储,组成稀疏矩阵

#define MAXSIZE 100    // 非零元最大个数
typedef struct
{
    Triple data[MAXSIZE + 1];      // data[0] 放 mu、nu、tu
    int mu, nu, tu;          // 分别表示行数、列数和非零元个数
}TSMatrix;

(2)带行逻辑链接的顺序表——带行链接信息的三元组表

(3)伪地址表示法

2、稀疏矩阵的链式存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值