数组和广义表

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个并列子表(将原子也看成表)的表

猜你喜欢

转载自blog.csdn.net/eat_shopping/article/details/80977940