1. 数组
数组是一种线性数据结构,元素按顺序存储在连续的内存空间中,适用于快速访问和修改元素。数组的特点是随机访问和固定大小。
1.1. 数组的存储
数组在内存中占用一块连续的存储空间,元素按索引顺序排列。每个元素占用固定大小的内存(由数据类型决定),因此可以通过索引快速定位元素。
- 一维数组:存储为连续的内存块,元素按顺序排列。
- 多维数组:以一维数组的形式存储,通过计算偏移量访问。例如,二维数组
A[m][n]在内存中按行优先或列优先方式存储。
存储特点:
- 优点:随机访问效率高,时间复杂度为O(1)O(1)O(1)。
- 缺点:插入和删除操作需要移动大量元素,效率较低,时间复杂度为O(n)O(n)O(n)。
1.2. 数组的寻址
数组的寻址基于其起始地址和索引。假设一维数组A的起始地址为base,元素类型占用size字节,则第i个元素的地址为:
address(A[i])=base+i⋅sizeaddress(A[i]) = base + i \cdot sizeaddress(A[i])=base+i⋅size
对于二维数组A[m][n](行优先存储),元素A[i][j]的地址为:
address(A[i][j])=base+(i⋅n+j)⋅sizeaddress(A[i][j]) = base + (i \cdot n + j) \cdot sizeaddress(A[i][j])=base+(i⋅n+j)⋅size
示例代码:计算一维数组元素地址(以整型数组为例)。
Python:
# 计算一维数组元素的内存地址
def get_array_address(base_address, index, size):
"""
base_address: 数组起始地址
index: 元素索引
size: 每个元素的大小(字节)
返回: 指定索引处元素的地址
"""
return base_address + index * size
# 示例
base = 1000 # 假设起始地址为1000
size = 4 # 整型占4字节
index = 2 # 访问第2个元素
address = get_array_address(base, index, size)
print(f"元素A[{
index}]的地址为: {
address}") # 输出: 1008

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



