数组与矩阵:
数组:存储空间连续的表结构
矩阵:带有二维信息的数据,一般使用二维数组来存储矩阵
矩阵中存储数据的元素个数一般都少于所申请的内存个数,如果直接以二维数组存储会浪费内存,因此可以通过压缩矩阵成一维数组的方式来节约内存
特殊矩阵:
行数、列数 n 行号i 列号j
上三角矩阵:
[0][1][3][6]
[ ][2][4][7]
[ ][ ][5][8]
[ ][ ][ ][9]
压缩方法:使用一维数组压缩
一维数组长度:(n+1)*n/2
下标的对应关系:(j+1)*j/2+i == 一维数组下标
要求:j >= i时 才有有效数据,才进行压缩
下三角矩阵:
[0][ ][ ][ ]
[1][2][ ][ ]
[3][4][5][ ]
[6][7][8][9]
压缩方法:使用一维数组压缩
一维数组长度:(n+1)*n/2
下标的对应关系:(i+1)*i/2+j == 一维数组下标
要求:j <= i时 才有有效数据,才进行压缩
对称矩阵:
沿左上-右下对角线对称
[0][1][3][6]
[1][2][4][7]
[3][4][5][8]
[6][7][8][9]
参考上三角\下三角进行压缩
对角矩阵(带状矩阵):
沿左上-右下对角线两边有数据
[0][1][ ][ ]
[2][3][4][ ]
[ ][5][6][7]
[ ][ ][8][9]
压缩方法:使用一维数组压缩
一维数组长度:3n-2
下标的对应关系:2*i+j
要求:abs(i-j)<=1时 才有有效数据,才进行压缩
稀疏矩阵:
有效数据不多且位置无规律,绝大多数位置都是无效数据不需要表示使用的,但是数量没有具体标准,全凭感觉
压缩方式:使用三元组来进行压缩
三元组:有三个数据项:
行、列、值
构成一个整体,该整体既可以顺序存储也可以链式存储
优点:节约存储空间
缺点:矩阵是具备随机访问的功能,但是压缩成三元组后失去了随机访问的效果,只能遍历查找某行某列的数据