数据结构——多维数组的存储
要让多维数组能在计算机的一维内存中存储,需将“多维的下标”映射为“一维的存储地址”。数组元素在内存中需连续排列,因此要确定元素的存储顺序,进而通过下标计算出物理地址。下面先从简单的一维数组讲起,再重点分析二维数组的两种核心存储方式。
1. 一维数组的存储结构
一维数组的元素本身呈线性排列,存储时无需复杂的“维度映射”。假设一维数组A[0...n-1]
的每个元素占L
个存储单元,且第一个元素A[0]
的存储地址为LOC(A[0])
,那么对于任意下标i
(0 ≤ i < n
),元素A[i]
的存储地址可通过公式计算:
[ \text{LOC}(A[i]) = \text{LOC}(A[0]) + i \times L ]
这是因为A[i]
前面有i
个元素,每个元素占L
个单元,总偏移量为i×L
,加上起始地址LOC(A[0])
,就得到了A[i]
的实际地址。这种“下标→地址”的直接计算,让一维数组能实现O(1)时间的随机访问,十分高效。
2. 二维数组的存储结构
二维数组可看作“由行(或列)组成的一维数组”,但存储时需确定“先存行还是先存列”,由此产生行优先存储和列优先存储两种映射方法,核心是将“行-列下标对(i,j)
”转换为“一维偏移量”。
(1)行优先存储
行优先存储的规则是“先行后列”:先存储行号较小的整行元素,同一行内再按列号从小到大存储。以二维数组A[h1][h2]
为例(行下标范围0~h1
,列下标范围