数据结构——数组和广义表
作者:互联网
文章目录
数组
- 数据的存储方式有两种
- 行优先存储(先存完一行,再存下一行)
- 列优先存储(先存完一列,再存下一列)
因为存储顺序的不同,导致数据位置的不同
题型一:求元素的存储位置
矩阵
- 稀疏矩阵:零元素较多的矩阵
- 特殊矩阵:对阵矩阵,
对阵矩阵
数据关于主对角线对称的矩阵
- 对称矩阵存储在一维数组中效率比较高的存储方式
由于数据是一样的,可以只存储对角线极其一侧的数据,然后根据数学知识找出特殊位置对应的下表(求前面有多少个数据):A[0,0]=[0],A[n-1,0]=[n*(n-1)/2]
三角矩阵
分为上三角和下三角矩阵:对角线一般有数据,另一半是零
- 三角矩阵存储在一维数组中效率比较高的存储方式
以上三角为例:A[0,0]=[0],A[0,n-1]=[n-1],A[n-1,n-1]=[n*(n+1)/2-1]
对角矩阵
矩阵只有平行一对角线的斜行有数据,其余的都是零,有几个斜行就为几对角矩阵
- 对角矩阵存储在一维数组中效率比较高的存储方式
稀疏矩阵
零元素较多的矩阵,但是这个零的个数没有明确的界定
- 三元组表示:数据的值,行标,列标
// 三元组的表示方法
typedef struct
{
float val;
int i, j;
} Trimat;
Trimat tri[maxSice + 1];
float val = tri[k].val;
int i = tri[k].i;
int j = tri[k].j;
- 邻接表表示法
广义表
广义表就是把线性表中元素不可再分的性质取消掉,在广义表中每一个结点可以是一个原子,也可以是广义表本身。
逻辑结构
-
A = (),A是一个空表,长度为0,深度为1.
-
B = (d,e)B的元素全是原子,长度为2,深度为1
-
C = (b,(e,f))C有两个两个元素,分别是原子b和广义表(e,f)长度为2,深度为2
-
D = (B,C)D的元素全是广义表,长度为2,深度为3,由此可见一个广义表的子表可以是其它已经定义的广义表的引用。
-
E = (a,E)E有两个元素,原子a和本身,长度为2,由此可见一个广义表可以递归定义的。展开E可以得到(a(a(a(a, …))))),是一个无限深的广义表。
-
广义表长度:为表中最上层元素的个数。
-
广义表深度:为表中括号的最大层数((d,e),(b(c,r)))
广义表的标头(head)和表尾(tail):当广义表非空的时候,第一个元素为标头,其余组成元素为表尾
存储结构
标签:存储,三角,数组,元素,矩阵,广义,数据结构 来源: https://blog.csdn.net/mankeywang/article/details/120923128