数据结构Python
数组
“线性表”是一种基本的数据结构,简单来说,线性表就是n个元素的有限序列。下面要介绍的数组结构就是一种典型的线性表的应用。
“数组”(Array)结构其实就是一排紧密相邻的可数内存,并提供了一个能够直接访问单一数据内容的计算方法。程序设计语言中数组的名称表示一块紧密相邻的内存的起始位置,而数组的索引(或下标)功能则用来表示从这个内存起始位置开始的第几个区块。
数组结构的声明在不同的程序设计语言中有所差异。但通常包括5种属性:起始地址、维度、索引上下限、数组元素个数、数组类型。
关于数组的内存地址是按线性顺序递增的,一般有两种方式:
以行为主:一行一行按序存储
以列为主:一列一列按列存储
简易代码:用python一维数组记录学生五门课的分数,打印出来并计算和。
Score = [87, 66, 90, 65, 70]
Total_Score = 0
for score in range(5):
print("第 %d 课的分数为:%d" %(score+1, Score[score]))
Total_Score += Score[score]
print("----------------------")
print("5门课总分为:%d" %Total_Score)
第 1 课的分数为:87
第 2 课的分数为:66
第 3 课的分数为:90
第 4 课的分数为:65
第 5 课的分数为:70
----------------------
5门课总分为:378
二维数组
二维数组是一维数组的扩展,差别就在于数组的声明。一个含有m * n个元素的二维数组A(1:m, 1:n),m代表行数,n代表列数。在实际的计算机内存中,仍然是以线性方式来存储二维数组,依然按照两种方式。
4*4二维数组
以行为主:存储顺序为A11, A12, …, A1n, A21, A22, …, Amn,假设a为数组A在内存中的起始地址,d为单位空间,那么Aij与内存地址的关系:
Loc(Aij)=a + n * (i-1) * d + (j-1) * d
以列为主:存储顺序为A11, A21, …, Am1, A12, A22, …, Amn,假设a为数组A在内存中的起始地址,d为单位空间,那么Aij与内存地址的关系:
Loc(Aij)=a + (i-1) * d + m * (j-1) * d
简易代码:用Python二维数组编写求二阶行列式
N = 2
arr = [[None] * N for row in range(N)]
print("|a1 b1|")
print("|a2 b2|")
arr[0][0] = input("请输入a1:")
arr[0][1] = input("请输入b1:")
arr[1][0] = input("请输入a2:")
arr[1][1] = input("请输入b2:")
result = int(arr[0][0]) * int(arr[1][1]) - int(arr[0][1]) * int(arr[1][0])
print("|%d %d|" %(int(arr[0][0]), int(arr[0][1])))
print("|%d %d|" %(int(arr[1][0]), int(arr[1][1])))
print("行列式值= %d" %result)
|a1 b1|
|a2 b2|
请输入a1:5
请输入b1:9
请输入a2:3
请输入b2:4
|5 9|
|3 4|
行列式值= -7
三维数组
三维数组依旧是一维数组的延伸,数组A声明为A(1: u1, 1: u2, 1:u3),表示A为一个含有u1 * u2 * u3个元素的三维数组,以线性方法处理,一样可以分为“以行为主”和“以列为主”两种方式。
A(i,j,k)与内存地址的关系(a为起始地址, d为单位空间):
以行为主:
Loc(A(i,j,k))=a + (i-1) * u2 * u3 * d + (j-1) * u3 * d + (k-1) * d
以列为主:
Loc(A(i,j,k))=a + (k-1) * u2 * u1 * d + (j-1) * u1 * d + (i-1) * d
简易代码:找出2 * 3 * 3三维数组中储存元素的最小值。(注:这里的代码只是展现一下三维数组,不考虑涉及算法的优化时间空间复杂度)
num = [[[33, 45, 67], [23, 71, 66], [55, 38, 66]],
[[21, 9, 15], [38, 69, 18], [90, 101, 89]]]
min_num = num[0][0][0]
for i in range(2):
for j in range(3):
for k in range(3):
if min_num >= num[i][j][k]:
min_num = num[i][j][k]
print("最小值为: %d" %min_num)
最小值为: 9
再往上的多维数组称为n维数组,虽然看上去复杂,但是依旧延伸于一维数组,可以自己尝试分析一下。
参考书目:《图解数据结构使用Python》