2.1数组 课件(32PPT)2021—2022学年浙教版(2019)选修1

资源下载
  1. 二一教育资源

2.1数组 课件(32PPT)2021—2022学年浙教版(2019)选修1

资源简介

(共32张PPT)
知识回顾
a[0]=‘李彤’
a[1]=‘张强’
a[2]=‘胡洁’
a[3]=‘杜刚’
第一个是李彤
第二个是张强
第三个是胡洁
第四个是杜刚
进一步抽象
CHZX
2.1 数组
浙江省高中信息技术 选择性必修一 《数据与数据结构》
昌化中学 应彤鑫
数组的概念与特性
概念
特性
01
数组
是由相同类型的变量构成的一个序列。
数组使用一个标识符(数组名)命名,并用编号(下标或索引)区分数组内的各个变量。
由数组名和下标组成数组的各个变量称为数组的分量(数组元素)。
数组的概念
Shuzu de gainian
李彤 张强 胡洁 杜刚
a[0]
a[1]
a[2]
a[3]
a
a
[2]
数组名
下标
a[2]
数组元素:胡洁
物理存储结构:顺序存储
创建数组时,系统会分配一块连续的存储空间,每个数组元素按照下标顺序依次存储。
标题文本预设
数组的概念
Shuzu de gainian
假设你和朋友们(共三人)出门旅行,为了出发方便想要相邻的房间,现在酒店一楼剩下如下房间,请问你们能住哪几间?
组合一:104、105、106
组合二:105、106、107
每个数组元素的类型相同,所需的存储空间一致,因此在明确第一个数组元素的存储位置后,可以利用下标计算出其他数组元素的存储位置,从而达到快速访问的目的。
一维数组
只有一个下标的数组称为一维数组,一维数组适合用来表示具有一维空间的线性特征的数据序列。
数组元素:
d[0],d[1],d[2],d[3],d[4]….
数组的概念
Shuzu de gainian
二维数组
二维数组中的数据元素有行、列两个维度的元素,需要两个下标。
数组元素:
d[0][0],d[0][1],d[0][2],d[0][3],d[0][4]….
平面棋盘与棋子布局
二维数组描述的棋盘信息
一维数组和二维数组
数组的概念
Shuzu de gainian
一维数组是顺序存储,二维数组也是顺序存储
行优先存储
列优先存储
逻辑结构
存储结构
存储结构
数组的特性
是数组元素的数据类型相同
通过数组名和下标对数字元素的值进行访问
存储空间固定不变:在对数组进行操作时,即使数组中的某些数据元素已经删除,但其占用的空间继续保留。
数组的特性
Shuzu de texing
b
b
删除b[3]
静态数组的缺点:
1.有些问题很难预估需要多少存储空间
2.如果删除了很多元素,不能充分利用空余空间。导致系统内存的浪费
数组的特性
数组的特性
Shuzu de texing
静态数组:定义一个数组后系统会根据每个数组元素的数据类型和总元素个数,在内存中开辟一批地址连续且空间固定的存储空间。
动态数组:在声明时没有确定数据规模的数组,可以在任何时候改变数据规模。
例:a[0]*10
例:a=[]
数组的基本操作
数组的创建
数组元素的访问
数组元素的插入
数组元素的删除
02
数组的基本操作
Shuzu de jibencaozuo
一致
可以不一致
顺序(连续)存储
链式(不连续)存储
数组≠列表
当列表中存储的元素类型保持一致,并且只考虑逻辑结构时,可以把列表看成数组。
数组的基本操作——数组创建
Shuzu de jibencaozuo——shuzuchuangjian
一维数组
直接创建:a=[0,0,0]
间接创建:a=[0]*3
列表生成式创建:
a=[0 for i in range(3)]
可以理解为:
for i in range(3):
a.append(0)
二维数组
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)]
a=[[0]*3 for i in range(3)]
数组的基本操作——数组创建
Shuzu de jibencaozuo——shuzuchuangjian
b
b=[[0]*3]*3或b=[[0,0,0]]*3
b[1][1]=1
b
想象中的b数组
实际上的b数组
b
数组的基本操作——数组创建
Shuzu de jibencaozuo——shuzuchuangjian
一维数组
直接创建:a=[0,0,0]
间接创建:a=[0]*3
列表生成式创建:
a=[0 for i in range(3)]
可以理解为:
for i in range(3):
a.append(0)
二维数组
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)]
a=[[0]*3 for i in range(3)]
数组的基本操作——数组创建
Shuzu de jibencaozuo——shuzuchuangjian
1.有如下Python程序段:
a=[[0]*4]*3
b=[[0]*4 for i in range(3)]
a[2][3]=8
b[2][3]=8
则程序执行后,下列说法正确的是( )
A.a[0][3]的值为0,b[0][3]的值为0
B.a[0][3]的值为0,b[0][3]的值为8
C.a[0][3]的值为8,b[0][3]的值为0
D.a[0][3]的值为8,b[0][3]的值为8
C
数组的基本操作——数组创建
Shuzu de jibencaozuo——shuzuchuangjian
2.有如下Python程序段:
a[[0]*3 for i in range(4)]
for i in range(len(a)):
for i in range(len[a[0]]):
a[i][j]=i*len(a[0])+j+1
则程序执行后,a[2][2]的值为( )
A.5 B.6 C.8 D.9
D
数组的基本操作——数组访问
Shuzu de jibencaozuo——shuzufangwen
一维数组
数组名[下标访问]
想要取到数组中第三个元素:
想要访问数组中第2到第4个元素切片访问:
二维数组
数组名[行下标][列下标]
想要取到数组中第2行第3列的元素:
访问第i行第j列的元素表示为:
a[2]
a[1:4]
a[1][2]
a[i-1][j-1]
数组的基本操作——数组访问
Shuzu de jibencaozuo——shuzufangwen
1.阿福将我国部分省份及其省会城市存储到二维数组中,并依次输出各省及其省会名称,例如“湖南省的省会是长沙市”’。相关代码如下:
a=[["浙江省", "杭州市"],["吉林省","长春市"],["湖南省","长沙市"],["湖北省","武汉市"],["江苏省","南京市"],["广东省","广州市"]]
for p in a:
print(f"{①}的省会是{②}")
则划线①和②处分别应填写的代码为( )
A.①p[1];②p[0] B.①p[0];②p[1]
C.①a[p][0];②a[p][1] D.①p[1];②p[2]
B
数组的基本操作——数组插入
Shuzu de jibencaozuo——shuzufangwen
数组元素的插入
思想:
当需要在数组中某个位置中插入一个新元素时,必须先将该位置及其后的所有数据向后移动一个位置,最后在修改该位置上的数据为新数据。
数组的基本操作——数组插入
Shuzu de jibencaozuo——shuzufangwen
方法一
for i in range(n-1,p,-1):
a[i]=a[i-1]
a[p]=x
n+=1
#n为列表长度
#p为元素插入位置
a
p
n-1
x=6
数组的基本操作——数组插入
Shuzu de jibencaozuo——shuzufangwen
方法二
对于数组a=[3,2,3,1,2,11]
[3, 2, 90, 3, 1, 2, 11]
相关函数:list.insert(p,x)
数组的基本操作——数组插入
Shuzu de jibencaozuo——shuzufangwen
方法三(只能加在最后)
相关函数:list.append(x)
对于数组a=[3,2,3,1,2],b=[123,456]
[3, 2, 3, 1, 2,100]
[3, 2, 3, 1, 2, [123, 456]]
[3, 2, 3, 1, 2, 123, 456]
数组的基本操作——数组删除
Shuzu de jibencaozuo——shuzushanchu
数组元素删除
思想:
当需要在数组中某个位置中删除一个元素时,只需将所有元素依次前移一位,然后将所有数组长度减一即可。
for i in range(p,n-1):
a[i]=a[i+1]
n-=1
#n为列表长度
#p为元素插入位置
a
p
n-1
数组的基本操作——数组删除
Shuzu de jibencaozuo——shuzushanchu
数组元素删除
相关函数:
list.pop([p=-1])
list.remove()
del list
del list[p]
del list[:]
对于数组a=[3,2,3,1,2,11]
[3, 2, 3, 1, 2]
[3, 2, 1, 2, 11]
[2, 3, 1, 2, 11]
[]
删除a列表
[3, 2, 1, 2, 11]
11
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
1.已知有一维数组a,则下列两段代码的功能是?
求数组中所有正数元素的和
s=0
for i in range(n):
if a[i]>0:
s=s+a[i]
print(s)
c=0
for i in range(n):
if a[i]>0:
c=c+1
print(c)
求数组中所有正数元素的个数
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
2.已知有一维数组a,则下列两段代码中k的功能?
K表示数组中最大的元素
K表示数组中最大的元素的下标
k=a[0]
for i in range(1,n):
if a[i]>k:
k=a[i]
print(k)
k=0
for i in range(1,n):
if a[i]>a[k]:
k=i
print(k)
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
3.求数组相邻元素差值的最大值。(即a(1)-a(0)、a(2)-a(1) a(n)-a(n-1)中的最大值)
k=a[1]- a[0]
for i in range(2,n):
if a[i]- a[i-1]>k:
k= a[i]- a[i-1]
print(k)
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
4.数组中所有大于key的元素中的最小值。
例如a(0),a(1),a(2),a(3),a(4),a(5)的值分别为 12, 7, 9, 13, 18, 2时,所有大于10的元素中最小值为12。
min=10000
for i in range(0,n-1):
if a[i]>key:
if a[i]min= a[i]
print(min)
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
5.已知数组a[5,3,8,12,4,9],现要在元素8和12的中间插入元素10,请用代码实现
for i in range(5,2,-1):
a[i+1]=a[i]
a[3]=10
a[i]
对应值
a[0] a[1] a[2] a[3] a[4] a[5] a[6] ……
5 3 8 12 4 9
插入10
i
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
6.有序数组中插入新数据(找位置)
考虑在以上数组中插入新数据 x=10 使得数组依然有序,需要注意的地方有:1.插入的数据应该处在哪个位置;2.有没有原始数据受影响以及如何消除影响。
a[i]
对应值
a[0] a[1] a[2] a[3] a[4] a[5] a[6] ……
3 4 5 8 9 12
①插入的数据应该处在哪个位置?
从数组头a(1)开始逐个比较其值与 10 的大小
i=0
while x>a[i] and i<=n-1:
i=i+1
②在确定新元素插入位置的情况下,后续的数组需要依次改变位置,使得最终的数组依然有序排列
for j in range(n-1,i,-1):
a[j+1]=a[j]
a[i] = x
n = n + 1
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
7.两个数组合并
将两个有序数组合并成一个有序数组
数组的基本操作——拓展实践
Shuzu de jibencaozuo——tuozhanshijian
8.基于数组的车牌摇号系统功能实现

展开更多......

收起↑

资源预览