二维数组
二维数组是一个矩阵,缺位的值补0。数组所需内存空间为n*sizeof(int),我们可将该下标对应的元素存储在以下位置
start+map(i1+i2+….in) * sizeof(int)
行主序
map(i,k) = 列*行+列
列主序
map(i,k)=列乘列+行
三维数组
nap(i,k,j) =i*u2 *u3+k *u3 + j
矩阵压缩
三角矩阵
对称矩阵
n*n矩阵M是一个对称矩阵,对称矩阵中,以对角线为界,上三角部分与下三角部分对称相等。对于对称矩阵,因为对角线以及上下元素相等,所以只需要保存其中一半,即对角线上的元素。例如若有n行n列,则这种形式下需要保持元素的个数为n(n+1)/2
行主序
对于采用压缩存储方式保存的特殊矩阵,map(i,j) = i * (i+j)/2+i(0≤i≤n-1,0≤j≤i),注意当j>i时,应返回0.
对于仅保存上三角或下三角部分会有如下取值:
下三角:当i≥j,则i * (i+1)/2+j
上三角:当i<j,则 j * (j+1)/2+i
稀疏矩阵
矩阵中可能会出现大量的0元素,而非0元素数量很少,这就是所谓的稀疏矩阵。
广义表
A = ()空表,长度为0,深度为1
B = (()),B的长度为1,深度为2
C=(6,2),C的长度为2,深度为1,两个元素都是原子
D=(‘a’,(12,’b’,4)),D的长度为2,深度为2,含一个原子和子表
E=(C、D、A),长度为3,深度为3,三个子表
F=(C),长度为1,深度为2,一个子表
G=(4,G),长度为2,深度为∞,是递归表。