数据结构python

数据结构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 课的分数为:872 课的分数为:663 课的分数为:904 课的分数为:655 课的分数为: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》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值