内容正文:
2.1数组
数组基本概念
数组是由相同类型的变量构成的一个序列。
由数组名和下标组成数组的各个变量称为数组的分量,也称为下标变量或数组元素。
每个数组元素的类型相同,所需的存储空间一致,因此在明确第一个数组元素的存储位置后,可以利用下标计算出其他数组元素的存储位置,从而达到快速访问的目的。
李彤 张强 胡洁 杜刚
a[0]
a[1]
a[2]
a[3]
a
a
[2]
数组名
下标
a[2]
数组元素:胡洁
牛刀小试
一个数组的第一个元素的存储位置为1000(表示在第1000个字节处),每个元素所占空间大小为8个字节,则第5个元素的位置是?
1000 B. 1040 C. 1032 D. 1256
C
数组基本概念
一维数组
只有一个下标的数组称为一维数组,一维数组适合用来表示具有一维空间的线性特征的数据序列。
数组元素:
d[0],d[1],d[2],d[3],d[4]….
二维数组
二维数组中的数据元素有行、列两个维度的元素,需要两个下标。
数组元素:
d[0][0],d[0][1],d[0][2],d[0][3],d[0][4]….
数组基本概念
二维数组在内存中也采用顺序存储,有行优先存储和列优先存储两种方式。
数组名指向数组中第一行第一个元素存储的位置,其它数组元素可通过下标快速得到。
行优先存储
列优先存储
0
1
0
0
1
2
2
0
…
[0][0]
[0][1]
[0][2]
[0][3]
[1][0]
[1][1]
[1][2]
[1][3]
...
0
1
0
0
1
2
2
2
…
[0][0]
[1][0]
[2][0]
[3][0]
[0][1]
[1][1]
[2][1]
[3][1]
...
数组的特性
数组元素的数据类型相同。
除非特别说明,数组指向的往往是静态数组。定义数组后,系统会根据每个数组元素的数据类型和总元素个数,在内存中开辟一段地址连续且空间固定的存储空间。
通过数组名和下标对数组元素的值进行访问。
系统根据下标和数据类型自动计算内存地址以访问数组元素。
存储空间固定不变。
数组一旦创建,存储空间固定不变。即使数组中某些元素已经删除后,占用的空间仍会保留。
静态数组
动态数组
数组定义时没有确定数据规模,可以在任何时候更改数据规模。
数组的基本操作
一致
可以不一致
顺序(连续)存储
链式(不连续)存储
数组≠列表
当列表中存储的元素类型保持一致,并且只考虑逻辑结构时,可以把列表看成数组。
数组的基本操作——数组的创建
一维数组
直接创建:a=[0,0,0]
间接创建:a=[0]*3
列表生成式创建:
a=[0 for i in range(3)]
二维数组
a
b
直接创建:
间接创建:
列表生成式创建:
b=[[0,0,0],[0,0,0],[0,0,0]]
b=[[0]*3]*3
可以理解为:
for i in range(3):
a.append(0)
数组的基本操作——数组的创建
b
b=[[0]*3]*3
b[1][1]=1
b
想象中的b数组
实际上的b数组
b
数组的基本操作——数组的创建
一维数组
直接创建:a=[0,0,0]
间接创建:a=[0]*3
列表生成式创建:
a=[0 for i in range(3)]
二维数组
a
b
直接创建:
间接创建:
列表生成式创建:
a=[[0,0,0],[0,0,0],[0,0,0]]
a=[[0]*3]*3
a=[[0 for i in range(3)] for i in range(3)]
可以理解为:
for i in range(3):
a.append(0)
可以理解为:
for i in range(3):
a.append([0 for i in range(3)])
数组元素的访问
数组元素可通过数组名和下标快速定位其内存地址,因此可通过数组名和下标直接进行访问。
一维数组
数组名[下标访问]
想要取到数组中第三个元素:
想要访问数组中第2到第4个元素切片访问: