1. 数组
数组一旦被定义,它的维数和维界就不再改变
采用顺序结构存储结构表示数组
二维数组的存储方式:以行序为主(C语言);以列序为主
LOC[i, j] == LOC(0, 0) + (b2*i + j )*L
数组是随机存储结构,由于计算各个元素存储位置的时间相等,所以存储数组中任一元素的时间也相等。
2. 矩阵压缩
压缩存储:为多个值相同的元只分配一个存储空间,对零元不分配空间
特殊矩阵:值相同的元素或零元素在矩阵分布中具有一定规律,反之为稀疏矩阵。
2.1 特殊矩阵
对称矩阵:将个元素压缩至n(n+1)/2个存储空间
下三角矩阵(上)
对角矩阵
2.2 稀疏矩阵
在m*n的矩阵中,有t个元素不为0,矩阵的稀疏因子:
该值<=0.05时,称为稀疏矩阵
稀疏矩阵的压缩存储: 记录非零元的行列位置以及值
3. 广义表
线性表的推广
广义表:
n 是广义表LS的长度
在广义表中,ai可以是单个元素(被称为原子),也可以是广义表(成为子表)。
当LS非空时,a1是表头,其余的(a2,…an)是LS的表尾。
3.1 广义表的存储结构
采用链式存储结构,每个数据元素可用一个节点表示。
两种结构的节点:
1) 表结点:表示列表,分为标识域,指示表头的标志域,指示表尾的标志域。
2) 原子结点:表示原子,分为标志域和值域。
也可采用另一种方式存储广义表,在此不赘述。
3.2 广义表的递归算法
3.2.1 广义表的深度
广义表的深度定义为括号的重数。
若是原子,定义其深度为0,LS的深度为各个的深度中最大值加1.
空表也是广义表,其深度为1。
将该问题转换为递归问题,得到递归条件以及边界:
DEP(LS)= 1 ,LS为空
DEP(LS)= 0 ,LS为原子
总结:DEP(LS)= 1+Max{ DEP(ai)} ,n>=1
3.2.2 复制广义表
一个非空广义表均可分解为表头和表尾,即一对确定的表头和表尾可惟一确定一个广义表。
复制一个广义表只要分别复制表头和表尾,然后合成即可
3.2.3 建立广义表的存储结构
两种方法:
1. 将广义表分为表头和表尾
2. 将广义表看成含有n个并列子表(将原子也看成表)的表