封装链表:
5、Linux内核通用链表
既然链表中的节点不能包含万物,那么就让万物来包含节点
6、通用链表
节点:
void* ptr; // 数据域
指针域
运算:
常规功能+回调函数
数组与矩阵:
数组:存储空间连续、数据类型相同的表结构
矩阵:带二维信息的数据,一般使用二维数组来存储矩阵
稀疏矩阵:矩阵有存储有效数据不多,绝大多数都是无效信息数据不需要存储,数量的多少没有特定的标准,全凭感觉
这些矩阵如果使用二维数组存储的话,会非常浪费存储空间,为了节约内存,可以考虑对矩阵进行压缩
特殊矩阵:
上三角矩阵 n*n
[0] [1] [3] [6]
[ ] [2] [4] [7]
[ ] [ ] [5] [8]
[ ] [ ] [ ] [9]
压缩方法:用一维数组存储
数组的长度:n*(n+1)/2
对应关系:(j+1)*j/2+i ->对应的一维数组下标
行列关系:j>=i
下三角矩阵
[0] [ ] [ ] [ ]
[1] [2] [ ] [ ]
[3] [4] [5] [ ]
[6] [7] [8] [9]
压缩方法:用一维数组存储
数组的长度:n*(n+1)/2
对应关系:(i+1)*i/2+j ->对应的一维数组下标
行列关系:j<=i
对称矩阵:沿着 (0,0)(1,1)(2,2)...(i,i)对称存储
[0] [1] [3] [6]
[1] [2] [4] [7]
[3] [4] [5] [8]
[6] [7] [8] [9]
压缩方法:用一维数组存储,把它当做上三角或者下三角看待即可
数组的长度:n*(n+1)/2
对应关系:(i+1)*i/2+j 或者 (j+1)*j/2+i ->对应的一维数组下标
行列关系:j<=i 或者 j>=i
对角矩阵(带状矩阵):
[0] [1] [ ] [ ]
[2] [3] [4] [ ]
[ ] [5] [6] [7]
[ ] [ ] [8] [9]
压缩方法:用一维数组存储
数组的长度:3n-2
对应关系:2*i+j ->对应的一维数组下标
行列关系:abs(i-j) <= 1
无规律的稀疏矩阵:
采用三元组方式进行压缩
三元组:
有三个数据项:行、列、值,构成一个整体,可以顺序存储,也可以链式存储
注意:稀疏矩阵经过压缩后就丢失了随机访问的功能