资源简介 (共32张PPT)知识回顾a[0]=‘李彤’a[1]=‘张强’a[2]=‘胡洁’a[3]=‘杜刚’第一个是李彤第二个是张强第三个是胡洁第四个是杜刚进一步抽象CHZX2.1 数组浙江省高中信息技术 选择性必修一 《数据与数据结构》昌化中学 应彤鑫数组的概念与特性概念特性01数组是由相同类型的变量构成的一个序列。数组使用一个标识符(数组名)命名,并用编号(下标或索引)区分数组内的各个变量。由数组名和下标组成数组的各个变量称为数组的分量(数组元素)。数组的概念Shuzu de gainian李彤 张强 胡洁 杜刚a[0]a[1]a[2]a[3]aa[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 texingbb删除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)二维数组ab直接创建:间接创建:列表生成式创建:a=[[0,0,0],[0,0,0],[0,0,0]]a=[[0]*3]*3a=[[0 for i in range(3)] for i in range(3)]a=[[0]*3 for i in range(3)]数组的基本操作——数组创建Shuzu de jibencaozuo——shuzuchuangjianbb=[[0]*3]*3或b=[[0,0,0]]*3b[1][1]=1b想象中的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)二维数组ab直接创建:间接创建:列表生成式创建:a=[[0,0,0],[0,0,0],[0,0,0]]a=[[0]*3]*3a=[[0 for i in range(3)] for i in range(3)]a=[[0]*3 for i in range(3)]数组的基本操作——数组创建Shuzu de jibencaozuo——shuzuchuangjian1.有如下Python程序段:a=[[0]*4]*3b=[[0]*4 for i in range(3)]a[2][3]=8b[2][3]=8则程序执行后,下列说法正确的是( )A.a[0][3]的值为0,b[0][3]的值为0B.a[0][3]的值为0,b[0][3]的值为8C.a[0][3]的值为8,b[0][3]的值为0D.a[0][3]的值为8,b[0][3]的值为8C数组的基本操作——数组创建Shuzu de jibencaozuo——shuzuchuangjian2.有如下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.9D数组的基本操作——数组访问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——shuzufangwen1.阿福将我国部分省份及其省会城市存储到二维数组中,并依次输出各省及其省会名称,例如“湖南省的省会是长沙市”’。相关代码如下: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]=xn+=1#n为列表长度#p为元素插入位置apn-1x=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为元素插入位置apn-1数组的基本操作——数组删除Shuzu de jibencaozuo——shuzushanchu数组元素删除相关函数:list.pop([p=-1])list.remove()del listdel 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——tuozhanshijian1.已知有一维数组a,则下列两段代码的功能是?求数组中所有正数元素的和s=0for i in range(n):if a[i]>0:s=s+a[i]print(s)c=0for i in range(n):if a[i]>0:c=c+1print(c)求数组中所有正数元素的个数数组的基本操作——拓展实践Shuzu de jibencaozuo——tuozhanshijian2.已知有一维数组a,则下列两段代码中k的功能?K表示数组中最大的元素K表示数组中最大的元素的下标k=a[0]for i in range(1,n):if a[i]>k:k=a[i]print(k)k=0for i in range(1,n):if a[i]>a[k]:k=iprint(k)数组的基本操作——拓展实践Shuzu de jibencaozuo——tuozhanshijian3.求数组相邻元素差值的最大值。(即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——tuozhanshijian4.数组中所有大于key的元素中的最小值。例如a(0),a(1),a(2),a(3),a(4),a(5)的值分别为 12, 7, 9, 13, 18, 2时,所有大于10的元素中最小值为12。min=10000for i in range(0,n-1):if a[i]>key:if a[i]min= a[i]print(min)数组的基本操作——拓展实践Shuzu de jibencaozuo——tuozhanshijian5.已知数组a[5,3,8,12,4,9],现要在元素8和12的中间插入元素10,请用代码实现for i in range(5,2,-1):a[i+1]=a[i]a[3]=10a[i]对应值a[0] a[1] a[2] a[3] a[4] a[5] a[6] ……5 3 8 12 4 9插入10i数组的基本操作——拓展实践Shuzu de jibencaozuo——tuozhanshijian6.有序数组中插入新数据(找位置)考虑在以上数组中插入新数据 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=0while 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] = xn = n + 1数组的基本操作——拓展实践Shuzu de jibencaozuo——tuozhanshijian7.两个数组合并将两个有序数组合并成一个有序数组数组的基本操作——拓展实践Shuzu de jibencaozuo——tuozhanshijian8.基于数组的车牌摇号系统功能实现 展开更多...... 收起↑ 资源预览