二维数组中某一元素存储位置的计算:
设一个二维数组 A[M][N] ,其中每个元素占K个字节,第一个元素为A[0][0],它的地址为LOC[A[0][0]],求元素Aij的存储位置
按行优先存储:LOC{Aij}=[A[0][0]]+(N*i+j)*K
按列优先存储:LOC{Aij}=[A[0][0]]+(M*j+i)*K
例题:
若起始元素是A11,则公式为:
若起始元素是A01,则公式为:
按行优先存储:LOC{Aij}=[A[0][0]]+(N*i+ j-1 )*K
按列优先存储:LOC{Aij}=[A[0][0]]+(M*(j-1) +i)*K
特殊矩阵的压缩存储:
对称矩阵
将下图对称矩阵压缩到一维数组里,元素新的下标设为k
i>=j为下三角 部分,i<j为上三角部分???
下三角矩阵
对角矩阵
稀疏矩阵
广义表 :
广义表记为:lLS = (a1, …,ai,…, an )
相关解释:
1.广义表又称列表,是线性表的推广
2.广义表中的元素既可以是原子类型,也可以是列表
3.常用小写字母表示原子类型,用大写字母表示广义表,如:B=(b,c,d)、A=(a,B)
相关术语:
1.长度:为广义表中元素个数n,n=0时为空表
如:(a,(a,b),d,e,((i,j),k) )其长度为 5(最大括号中逗号数+1)
2.表头:广义表中的第一个数据元素
3.表尾:在广义表中,除表头外,剩余元素构成的广义表称为其表尾
4.深度:广义表中括号嵌套的最深层次
如: (a,(a,b),d,e,((i,j ) ,k ) ) 深度为3
特点:
1.广义表是多层次的结构(元素可以是子表,而子表的元素还可以是子表)
2.广义表可被其他子表共享
3.广义表可以是递归的表,即它可以是自身的表,如E=(a,E)
求表头、表尾:
GetHead() [表中第一个元素]
GetTail() [除第一个元素外剩余的元素组成的广义表]