目录
多维数组
二维数组矩阵表示
数组的顺序存储
- 按行优先:将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。a00, a01, a02 ... a(m-1)(n-1)
- 按列优先:将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量之后。a00, a10, a20 ... a(m-1)(n-1)
计算数组元素的存储地址
要知道:开始存储的结点地址(基地址)、维数和每维的上 下界、每个元素所占用的单元数。
- 每个元素占d个存储单元
- 数组元素a(ij),位于第i行,第j列
- 它的前面共有i*n+j个元素
公式:LOC(a(ij)) = LOC(a(00)) + (i*n+j)*d
例题:
特殊矩阵
广义表
基本介绍
概述:n(n≥0)个元素a1,a2,...,a(n)的有限序列,a(i)或者是原子项,或者是一个广义表,记作LS=(a1,a2,...,a(n))。第一个元素a1是LS的表头,其余元素成的表称为LS的表尾。
一个表展开后所含括号的层数称为广义表的深度。
图示:
性质:
- 广义表的元素可以是子表,子表又可以含有子表,广义表是一个多层次结构的表,它可以用图形象的表示
- 广义表具有递归和共享的性质。例如:F就是一个递归的广义表,D表是共享的表
注意:() 为空表,长度为0;(()) 长度为1,表尾为空表。
链式存储结构
第一个结点tag是一个标志位 | 为0时,该结点是子表 为1时,该结点是原子结点 |
第二个结点 | 为data时,用来存放元素值 为slink时,存放子表的地址 |
link域用来存放与本元素同一层的下一个元素对应结点的地址 元素是在该层的最后一个元素时,link的值为null |