线性表、栈、队列和串都是线性表的数据结构,他们的逻辑结构特征是:每个数据元素之多有一个直接前趋和直接后继。对于多维数组和广义表是一种复杂的非线性结构,它们的逻辑特征是:一个元素可能有多个直接前趋和多个直接后继。
一、数组概念
一维数组
可以看成是一个线性表或一个向量,在计算机中是一段连续的存储单元,适用于随机查找。二维数组
由图可以知道,每个元素最多由两个直接前驱和两个直接后继(边界除外),故是一种典型的非线性结构。
多维数组最多有多个直接前驱和直接后继,也是非线性结构。
- 多维数组在计算机内的存储
由于内存结构是一维的,故必须按照某种次序将数组元素排成一个线性序列。
二、多维数组的存储结构
数组是先定义后使用,且为静态分配存储单元,所以采用顺序存储。有行优先顺序存储、列优先顺序存储。
对于数组 A(nxm)
1. 行优先 顺序存储
(a11->a12->a13->...a1n)->(a21->a22->a23->...a2n)->...(am1->...->amn)
最左边下标变化慢,做for外层循环;右边变化快,做for内层循环。
aij地址:前面有i行(i×n),改行前面有j个元素
LOC(aij) = LOC(a00) + (i*n+j)*d // d为每个元素所占空间大小
// 三维数组
LOC(aijk) = LOC(a000) + (i*n*p+j*p+k)*d
2 . 列优先 顺序存储
(a11->a21->a31->..an1)->(a12->a22->a32->...an2)->(a1m->a2m->...->anm)
最又边下标变化慢,做for外层循环;左边变化快,做for内层循环。
aij地址:前面有j列(j×m),改行前面有i个元