1、选择性必修1数据与数据结构第二章 数组与链表 2.1.1 数组的概念、特性、基本操作情境导入杭州车牌阶梯摇号情境导入杭州车牌阶梯摇号随机种子数摇号基数序号数组基本概念数组是由相同类型的变量构成的一个序列。由数组名和下标组成数组的各个变量称为数组的分量,也称为下标变量或数组元素。b0 b2 b3 b4 b520 15 14 104b 3数组分量数组分量/下标变量下标变量/数组元素数组元素b3数组名下标每个数组元素的类型相同,所需的存储空间一致,因此在明确第一个数组元素的存储位置后,可以利用下标计算出其他数组元素的存储位置,从而达到快速访问的目的。数组基本概念一维数组:只有一个下标的数组称为一维数
2、组,一维数组适合用来表示具有一维空间的线性特征的数据序列。数组元素:d0,d1,d2,d3,d4.数组基本概念二维数组:二维数组中的数据元素有行、列两个维度的元素,需要两个下标。平面棋盘与棋子布局二维数组描述的棋盘信息数组基本概念二维数组描述的棋盘信息二维数组行优先存储方式请填写二维数组列优先存储方式。数组的特性(1)数组元素(下标变量)的数据类型相同(2)通过下标变量对数组元素的值进行访问(3)存储空间固定不变除非特殊说明,数组指向的往往是静态数组数组的基本操作一维数组的创建例1 统计分数学校元旦文艺汇演比赛时,现场有9位评委给各班节目打分,统计系统需要根据9位评委的原始分计算平均分作为各班
3、表演节目的最终得分。分析:该问题中9位评委给出的分数属于同一类型的数据,可以创建一个包含9个下标变量的数值型数组来存储评委的原始分。创建保存评委原始分的一维数组s的程序如下:数组的基本操作二维数组的创建qp=0*4*4数组元素的访问由于数组元素可以通过数组名和下标快速确定数据元素的内存地址,因此可通过下标变量直接进行访问。例如,print(s5)表示将一维数组s中第6个元素的值进行输出(第1个元素为s0)。数组元素的访问算法设计:初始化3个数组a,b,c,元素个数分别为n,m和n+m。数组a和数组b用来存储已有的两个有序数据(降序),数据使用随机函数randint(start,end)产生;数
4、组c用于保存合并后的所有数据(降序),所有数组元素的值初始化为0。使用变量i指向数组a当前未处理数据中要处理的数据元素的位置,初始化为0;变量j指向数组b当前未处理数据中要处理的数据元素的位置,初始化为0;变量k指向数组c中可加入元素的位置,初始化为0。数组元素的访问算法设计:重复以下操作,直至数组a或数组b中的数据元素全部合并入数组c中:比较ai和bj的大小,若aibj,则将ai放入数组c中,并将i和k的值增加1;否则,将bj放入数组c中,并将j和k的值增加1。如果数组a或数组b中尚有未处理的数据元素,那么将剩余数据元素按原有顺序依次存入数组c中,合并完成,输出数组c。数组元素的访问程序测试
5、结果from random import randint a=0*20#创建数组b=0*15c=0*35a0=randint(95,100)for i in range(1,20):#随机产生降序数据序列一 ai=ai-1-randint(1,5)生成a数组序列:99,97,95,94,90,87,83,79,78,73,71,69,67,66,61,60,56,55,52,51b0=randint(95,100)for i in range(1,15):#随机产生降序数据序列二 bi=bi-1-randint(1,5)生成b数组序列:99,96,94,91,90,88,87,82,80,79
6、,75,73,70,66,62print(原始数据序列一为:)print(a)print(原始数据序列二为:)print(b)数组元素的访问程序测试结果i=0j=0k=0while(i15):#合并数据直至某个数组数据合并完成 if ai=bj:ck=ai i=i+1 k=k+1 else:ck=bj j=j+1 k=k+1C数组序列99,99,97,96,95,94,94,91,90,90,88,87,87,83,82,80,79,79,78,75,73,73,71,70,69,67,66,66,62,0,0,0,0,0,0j=15 i=14数组元素的访问程序测试结果while i 20:#
7、当数据序列一中还有数据时的处理 ck=ai i=i+1 k=k+1C数组序列99,99,97,96,95,94,94,91,90,90,88,87,87,83,82,80,79,79,78,75,73,73,71,70,69,67,66,66,62,61,60,56,55,52,51j=15 i=20while j 15:#当数据序列二中还有数据时的处理 ck=bj j=j+1 k=k+1print(合并后的数据序列为:)print(c)输出合并后的C数组序列数组元素的访问二维数组访问:二维数组,可以使用数组的下标变量来任意访问数组元素。数组元素的插入与删除数组元素的插入与删除车牌摇号系统实例
8、(1)抽象与建模 用n表示有资格参加摇号的申请人总数,用序列luck存储编号,luck 0,luck 1,luck n1 依次表示n个编号,其中的下标表示每个编号的位置,luck i 的初值为第i+1位申请人的编号。使用变量m表示最终的车牌发放数量,计数器c表示已抽中人数,每当随机抽出一个有效的下标位置(如k)时,计数器c加1,输出申请人的编号后将该下标位置(如luck k)的值设为空串(表示该编号已被抽取),用来判断其后抽取的编号是否重复。重复该过程直至计数器c的值变为m,摇号结束。车牌摇号系统实例(2)设计算法由于该问题中数据规模可以预估,在处理过程中其数据规模保持不变,并需要根据随机产生
9、的编号读取和修改对应的值,所以用数组来存储所有申请人的编号,下标表示该编号的位置。算法分为两个步骤:根据申请人总数n,初始化数组luck,其数组下标代表位置,数组元素值为申请者编号(类型为字符串),并使用计数器c表示已抽中人数,初始化值为0。使用随机整数函数randint(a,b)随机产生一个位置k,若其作为数组下标对应的数组数据元素值为空串,则表示该编号已被抽取,该编号为重复号码,需要重新生成;否则,表示该编号为有效编号,计数器c加1,输出对应的数组元素并修改数组元素值为空串,表示该编号已被抽取。重复执行步骤,直至计数器c变为m,程序结束。车牌摇号系统实例车牌摇号系统实例Python列表常用
10、函数与方法车牌摇号系统列表函数版from random import randintluck=#新建列表csv_file=open(bh.csv,r,encoding=utf-8)#打开存有编号的文件 bh.csvflines=csv_file.readlines()#将文件中所有编号按行读入 flines 中csv_file.close#关闭文件n=0for one_line in flines:tmp=one_line.strip(n)#将一个编号去除换行后赋给 tmp luck.append(tmp)#填加列表元素 n+=1#元素数组减少1个m=int(input(请输入发放数:)for i in range(m):k=randint(0,n-1)print(luckk)luck.pop(k)#编号抽取后删除 n-=1课堂小结学习评价对自己和同伴的表现进行客观的评价,并思考后续完善的方向。(5=优秀,4=超出一般水平,3=满意,2=有待改进,1=不太理想)评分项自我评价同学互评能理解数组的概念、组织结构及其特性。5 4 3 2 15 4 3 2 1了解数组的基本操作5 4 3 2 15 4 3 2 1能合理利用数组解决相应的简单问题并编程实现5 4 3 2 15 4 3 2 1课堂作业
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。