1、知识回顾知识回顾a 0 =a 0 =李 彤李 彤 a 1 =a 1 =张 强张 强 a 2 =a 2 =胡 洁胡 洁 a 3 =a 3 =杜 刚杜 刚 第一个是李彤第一个是李彤第二个是张强第二个是张强第三个是胡洁第三个是胡洁第四个是杜刚第四个是杜刚进一步抽象进一步抽象2.1 数组浙江省高中信息技术 选择性必修一 数据与数据结构昌化中学 应彤鑫数组的概念与特性数组的概念与特性 概念 特性数组l 是由相同类型的变量构成的一个序列。l 数组使用一个标识符(数组名)命名,并用编号(下标或索引)区分数组内的各个变量。l 由数组名和下标组成数组的各个变量称为数组的分量(数组元素)。数组的概念数组的概念S
2、h u z u d eS h u z u d e g a i n i a n g a i n i a n李彤李彤张强张强胡洁胡洁杜刚杜刚a0a1a2a3aa2数组名下标a2数组元素:胡洁物理存储结构:顺序存储l 创建数组时,系统会分配一块连续的存储空间,每个数组元素按照下标顺序依次存储。数组的概念S h u z u d eS h u z u d e g a i n i a n g a i n i a n假设你和朋友们(共三人)出门旅行,为了出发方便想要相邻的房间,现在酒店一楼剩下如下房间,请问你们能住哪几间?组合一:104、105、106组合二:105、106、107每个数组元素的类型相同,所
3、需的存储空间一致,因此在明确第一个数组元素的存储位置后,可以利用下标计算出其他数组元素的存储位置,从而达到快速访问的目的。一维数组只有一个下标的数组称为一维数组,一维数组适合用来表示具有一维空间的线性特征的数据序列。数组元素:d0,d1,d2,d3,d4.数组的概念S h u z u d eS h u z u d e g a i n i a n g a i n i a n二维数组二维数组中的数据元素有行、列两个维度的元素,需要两个下标。数组元素:d00,d01,d02,d03,d04.平面棋盘与棋子布局二维数组描述的棋盘信息一维数组和二维数组数组的概念数组的概念S h u z u d eS h
4、 u z u d e g a i n i a n g a i n i a n一维数组是顺序存储,二维数组也是顺序存储行优先存储列优先存储数组的特性l 是数组元素的数据类型相同l 通过数组名和下标对数字元素的值进行访问l 存储空间固定不变:在对数组进行操作时,即使数组中的某些数据元素已经删除,但其占用的空间继续保留。数组的特性数组的特性S h u z u d eS h u z u d e t e x i n g t e x i n gbb删除b3静态数组的缺点:1.有些问题很难预估需要多少存储空间2.如果删除了很多元素,不能充分利用空余空间。导致系统内存的浪费数组的特性数组的特性数组的特性S h
5、 u z u d eS h u z u d e t e x i n g t e x i n g静态数组:定义一个数组后系统会根据每个数组元素的数据类型和总元素个数,在内存中开辟一批地址连续且空间固定的存储空间。动态数组:在声明时没有确定数据规模的数组,可以在任何时候改变数据规模。例:a0*10例:a=数组的基本操作数组的基本操作 数组的创建 数组元素的访问 数组元素的插入 数组元素的删除数组的基本操作数组的基本操作S h u z u d eS h u z u d e j i b e n c a o z u o j i b e n c a o z u o一致可以不一致顺序(连续)存储链式(不连续
6、)存储数组列表当列表中存储的元素类型保持一致,并且只考虑逻辑结构时,可以把列表看成数组。数组的基本操作数组的基本操作数组创建数组创建S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u c h u a n g j i a n j i b e n c a o z u o s h u z u c h u a n g j i a n一维数组 直接创建:a=0,0,0 间接创建:a=0*3 列表生成式创建:a=0 for i in range(3)可以理解为:for i in range(3):a.append(0)二维数组ab 直接创建
7、:间接创建:列表生成式创建:a=0,0,0,0,0,0,0,0,0a=0*3*3a=0 for i in range(3)for i in range(3)a=0*3 for i in range(3)数组的基本操作数组创建S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u c h u a n g j i a n j i b e n c a o z u o s h u z u c h u a n g j i a nbb=0*3*3或b=0,0,0*3b11=1b想象中的b数组实际上的b数组b数组的基本操作数组的基本操作数组创建数
8、组创建S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u c h u a n g j i a n j i b e n c a o z u o s h u z u c h u a n g j i a n一维数组 直接创建: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,0a=0*3*3a=0 for i in range(3)fo
9、r i in range(3)a=0*3 for i in range(3)数组的基本操作数组的基本操作数组创建数组创建S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u c h u a n g j i a n j i b e n c a o z u o s h u z u c h u a n g j i a n1.有如下Python程序段:a=0*4*3b=0*4 for i in range(3)a23=8b23=8则程序执行后,下列说法正确的是()A.a03的值为0,b03的值为0B.a03的值为0,b03的值为8C.a0
10、3的值为8,b03的值为0D.a03的值为8,b03的值为8C数组的基本操作数组的基本操作数组创建数组创建S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u c h u a n g j i a n j i b e n c a o z u o s h u z u c h u a n g j i a n2.有如下Python程序段:a0*3 for i in range(4)for i in range(len(a):for i in range(lena0):aij=i*len(a0)+j+1则程序执行后,a22的值为()A.5B
11、.6C.8D.9D数组的基本操作数组访问S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u f a n g w e n j i b e n c a o z u o s h u z u f a n g w e n一维数组数组名下标访问想要取到数组中第三个元素:想要访问数组中第2到第4个元素切片访问:二维数组数组名行下标列下标想要取到数组中第2行第3列的元素:访问第i行第j列的元素表示为:a2a1:4a12ai-1j-1数组的基本操作数组的基本操作数组访问数组访问S h u z u d eS h u z u d e j i b e
12、n c a o z u o s h u z u f a n g w e n j i b e n c a o z u o s h u z u f a n g w e n1.阿福将我国部分省份及其省会城市存储到二维数组中,并依次输出各省及其省会名称,例如“湖南省的省会是长沙市”。相关代码如下:a=浙江省,杭州市,吉林省,长春市,湖南省,长沙市,湖北省,武汉市,江苏省,南京市,广东省,广州市for p in a:print(f的省会是)则划线和处分别应填写的代码为()A.p1;p0 B.p0;p1 C.ap0;ap1 D.p1;p2B数组的基本操作数组插入S h u z u d eS h u z u
13、 d e j i b e n c a o z u o s h u z u f a n g w e n j i b e n c a o z u o s h u z u f a n g w e n数组元素的插入思想:当需要在数组中某个位置中插入一个新元素时,必须先将该位置及其后的所有数据向后移动一个位置,最后在修改该位置上的数据为新数据。数组的基本操作数组插入S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u f a n g w e n j i b e n c a o z u o s h u z u f a n g w e n方法一
14、for i in range(n-1,p,-1):ai=ai-1ap=xn+=1#n为列表长度#p为元素插入位置apn-1x=6数组的基本操作数组插入S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u f a n g w e n j i b e n c a o z u o s h u z u f a n g w e n方法二对于数组a=3,2,3,1,2,113,2,90,3,1,2,11相关函数:list.insert(p,x)数组的基本操作数组插入S h u z u d eS h u z u d e j i b e n c
15、a o z u o s h u z u f a n g w e n j i b e n c a o z u o s h u z u f a n g w e n方法三(只能加在最后)相关函数:list.append(x)对于数组a=3,2,3,1,2,b=123,4563,2,3,1,2,1003,2,3,1,2,123,4563,2,3,1,2,123,456数组的基本操作数组删除S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u s h a n c h u j i b e n c a o z u o s h u z u s h
16、 a n c h u数组元素删除思想:当需要在数组中某个位置中删除一个元素时,只需将所有元素依次前移一位,然后将所有数组长度减一即可。for i in range(p,n-1):ai=ai+1n-=1#n为列表长度#p为元素插入位置apn-1数组的基本操作数组删除S h u z u d eS h u z u d e j i b e n c a o z u o s h u z u s h a n c h u j i b e n c a o z u o s h u z u s h a n c h u数组元素删除相关函数:list.pop(p=-1)list.remove()del listdel
17、listpdel list:对于数组a=3,2,3,1,2,113,2,3,1,23,2,1,2,112,3,1,2,11删除a列表3,2,1,2,1111数组的基本操作拓展实践S h u z u d eS h u z u d e j i b e n c a o z u o t u o z h a n s h i j i a n j i b e n c a o z u o t u o z h a n s h i j i a n1.已知有一维数组a,则下列两段代码的功能是?p 求数组中所有正数元素的和s=0for i in range(n):if ai0:s=s+aiprint(s)c=0for
18、 i in range(n):if ai0:c=c+1print(c)p 求数组中所有正数元素的个数数组的基本操作拓展实践S h u z u d eS h u z u d e j i b e n c a o z u o t u o z h a n s h i j i a n j i b e n c a o z u o t u o z h a n s h i j i a n2.已知有一维数组a,则下列两段代码中k的功能?p K表示数组中最大的元素p K表示数组中最大的元素的下标k=a0for i in range(1,n):if aik:k=aiprint(k)k=0for i in range
19、(1,n):if aiak:k=iprint(k)数组的基本操作拓展实践S h u z u d eS h u z u d e j i b e n c a o z u o t u o z h a n s h i j i a n j i b e n c a o z u o t u o z h a n s h i j i a n3.求数组相邻元素差值的最大值。(即a(1)-a(0)、a(2)-a(1)a(n)-a(n-1)中的最大值)k=a1-a0for i in range(2,n):if ai-ai-1k:k=ai-ai-1print(k)数组的基本操作拓展实践S h u z u d eS h
20、u z u d e j i b e n c a o z u o t u o z h a n s h i j i a n j i b e n c a o z u o t u o z h a n s h i j i a n4.数组中所有大于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 aikey:if aiai and i=n-1:i=i+1在确定新元素插入位置的情况下,后续的数组需要依次改变位置,使得最终的数组依
21、然有序排列 for j in range(n-1,i,-1):aj+1=ajai=x n=n+1数组的基本操作拓展实践S h u z u d eS h u z u d e j i b e n c a o z u o t u o z h a n s h i j i a n j i b e n c a o z u o t u o z h a n s h i j i a n7.两个数组合并将两个有序数组合并成一个有序数组数组的基本操作拓展实践S h u z u d eS h u z u d e j i b e n c a o z u o t u o z h a n s h i j i a n j i b e n c a o z u o t u o z h a n s h i j i a n8.基于数组的车牌摇号系统功能实现