资源简介 第一章 认识数据和数据结构 章节测试一、选择题1.数据元素及其关系在计算机存储器内的表示,也称为数据的( )A.线性结构 B.物理结构 C.逻辑结构 D.空间结构2.下到关于数据结构与算法效率的描述,不正确的是( )A.数据元素是数据的基本单位B.数据的存储结构应能体现其逻辑结构C.使用数组结构存储插入、删除较多的数据时,效率较低D.某单向链表(结点数>2)设有头尾指针,在该链表尾节点后插入一个新节点时需要遍历多个结点3.在Python程序中,列表(List)就是一批变量的集合。已知列表m[2,4,0,23,1,20],那么m[1]表示的元素是( )A.1 B.2 C.4 D.204.下列关于线性表的描述,正确的是( )A.链表在访问、插入、删除节点操作时,算法效率比数组高B.栈是一种“先进先出,后进后出”的线性表结构C.循环队列是首尾相连的队列,数据入队时无需考虑是否会“溢出”D.字符串是元素个数有限的线性表结构5.以下说法错误的是( )A.栈是一种先进后出的数据结构 B.队列是一种先进先出的数据结构C.C++ STL中的map查询时间复杂度为0(1) D.使用哈希时,可能会发生哈希冲突6.下列场景中蕴含的数据结构思想与图一致的是( )图一:排队做核酸A.Excel执行撤销操作 B.编号不重复的名单C.寻宝游戏路线 D.打印机任务面板7.下列有关数据结构的说法,正确的是( )A.数组、链表、队列、栈、树均为线性表B.数组和链表的存储空间都是固定不变的C.在数组中,可通过数组名和下标直接访问数组元素D.链表中的一个节点就是一个元素,同一链表中每个节点的结构可以不相同8.下列有关数据结构的说法不正确的是:( )A.频繁进行数据插入和删除操作,链表效率要比数组高B.单击浏览器“后退”按钮可回到刚才浏览过的网页, 说明网页数据是采用栈进行组织的C.队列是一种先进先出的线性表,插入一端为队首,删除一端为队尾D.使用数组在进行数据插入和删除操作时,不一定会引起数据移动9.下列关于数据结构的说法不正确的是( )A.数据结构是指数据的组织形式 B.二维数组属于线性数据结构C.链表是一种优于数组的数据结构 D.队列是限定仅在一端进行插入,在另一端进行删除的线性数据结构10.下列关于数据结构的说法,正确的是( )A.用程序实现问题解决时只能采用一种数据结构B.数据的逻辑结构是指数据元素间的关系C.链表比数组更适合大量数据元素的随机访问D.数组不必占用一片连续存储的单元11.已知Python列表a=['W','o','r','d'],依次执行a.pop()、a.append(1)、a.append(d)操作,列表a的值为( )A.['W','o','r','d']B.['W','o','r','1','d']C.['o','r','d','1','d']D.['1','d','o','r','d']12.图形结构中的每一个结点( )A.无直接后继结点 B.无直接前驱结点C.只有一个直接前驱结点和一个直接后继结点 D.可能有多个直接前驱结点和多个直接后继结点13.下列对数据结构的描述不正确的是( )A.数据的逻辑结构是数据元素在计算机存储器中的存储方式B.对同一事物构造的数据结构不同,数据处理的过程就不同C.数据的存储结构不同,对数据进行同一操作的实现方法也不同D.顺序存储结构是最基本的存储方法14.以下数据结构中哪一个是非线性结构?( )A.队列 B.列表C.树 D.线性表15.以下选项中,属于integer类型常量的是( )A.123 B.3.1415C.’ 1.23E+04’ D.True16.如下图所示,从图中可知中国的人均GDP处于上涨状态。以上采用的数据分析方法是( ) A.平均分析和交叉分析 B.对比分析和交叉分析C.平均分析和对比分析 D.对比分析和结构分析17.除了首元素没有前趋元素,尾元素没有后续元素外其他所有元素都只有一个前趋元素和后续元素,这种数据结构属于( )A.树结构 B.图结构 C.线性结构 D.集合结构18.下列关于数据结构的说法正确的是( )A.同一数据元素中各数据项的数据类型一定相同B.跳跃表是立足链表、借鉴二分查找的思想而形成的数据结构C.若入栈序列为 abcd,则出栈序列可能为 dbcaD.在浏览器中执行“后退”、“前进”操作的原理与队列的特点相同19.一份有效的数据分析报告,能够帮助用户( )A.了解事物发展现状,预判事物发展趋势 B.有效判断所需解决问题的影响因素C.有针对性地选择解决问题的方案 D.以上都是20.在一个单向链表(如图)中,若在尾指针tail所指节点之后插入新节点(r所指节点),则执行的操作是( )A.tail所指节点的data3值赋为r所指节点的data4值B.r所指节点的next值赋为tailC.r所指节点的next值赋为-lD.tail所指节点的next赋为r,r所指节点的next值赋为-l21.一个栈的入栈序列为1,2,3,4,5,其出栈序列为s1,s2,s3,s4,s5。若s2是3,则s1不可能是( )A.1 B.2 C.4 D.522.下列关于数据和信息的说法正确的是( )A.数据是信息的载体,数据是信息所表示的意义 B.数据是信息的载体,信息是数据所表示的意义C.信息是数据的载体,数据是信息所表示的意义 D.信息是数据的载体,信息是数据所表示的意义23.用两个列表a、b分别保存单向链表中的数据区域和指针区域。如下图所示,在节点x与节点y之间插入一个新节点,操作步骤正确的是( )①b[i]= b[y] ②b[i]= b[x] ③b[y]= i ④b[x]=i ⑤b[i]= x ⑥b[i]= yA.③⑥ B.④② C.①③ D.②④24.有如下python程序段:a=[[3,2],[2,3],[7,1],[1,0]]p=head=0while a[p][1]!=head: print(a[p][0],end="->") print(a[p][0])上述程序段要遍历链表中的所有元素,划线处应添加的代码是()A.p+=1 B.a[p][1]+=1 C.p=a[p][1] D.a[p][1]=a[a[p][1]][1]25.下列关于数据结构的说法,正确的是( )A.基本数据类型是在程序设计时利用结构数据类型构造出的新类型B.数据结构设计主要考虑数据之间的存储结构C.Python列表中数据的存储结构和逻辑结构相同D.行优先的6行10列方阵a首地址为SA,每个元素占10个字节,那么a[2][3]的起始地址为SA+230二、操作题26.张三是一名计算机专业的大学生,为了帮助同学们学习专业相关的英语词汇,编写一个简易字典程序。该程序中存放词汇数据库,在学习中输入英文单词,可以获得中文翻译结果。程序中的词汇数据库采用链表方式存储,首字母相同时按升序排序。查找单词时,首先根据首字母找到同首字母最小单词所在链表,再按照链表顺序查找该单词。(1)根据题意,部分的单词库数据逻辑结构如图所示,查找单词“byte”的过程是“binary”→“bit”→“byte”,补充图中空白单元格的值为列表索引 数据区域 指针区域0 audio 音频 -11 binary 二进制数 62 byte 字节 -13 cursor 光标 -14 access 存取 15 cache 高速缓存 36 bit 比特 ________(2)wordlist(data,info)函数实现将词汇数据库data以链表的方式按字母序升序排列。info表示词汇数据库中各字母开头的最小单词位置,如info[0]表示字母a开头的最小单词在词汇数据库data中的位置。实现该功能的程序如下,请在划线处填入合适的代码。def wordlist(data,info):n=len(data)for i in range(n):data[i].append(—1) #data[i]追加一个元素—1for i in range(n):d=data[i][0]①if info[k] ==-1:info[k] = ielse:head=info[k]q=headwhile②p=qq=data[q][2]if q!=head:data[p][2]=idata[i][2]=qelse:data[i][2]=head③return data,info(3)searchword(data,info,key)函数实现单词的查找。程序如下,请在划线处填入合适的代码。def searchword(data,info,key):k=ord(key[0])—ord("a")head=info[k]p=headwhile p!=-1:if data[p][0]==key:returnp=data[p][2]return"没有找到该单词"读取词汇数据库,存入列表data中,列表的每个元素包含2个数据项,分别为英文单词和中文翻译,如data=[['audio','音频'],['binary','二进制数']…],数据读取存入的代码略。’’’info=[-1]*26data,info=wordlist(data,info)key=input("请输入查找单词:").lower() #转化为小写字母res=searchword(data,info,key)print(key,“查找结果是:”,res)27.有个火车站的铁轨调度方法如下:火车从一方1,2,3,4…依次进入,由于每个火车皮要去的目标车站不一样,想让车皮到站后能以最少的时间从火车上脱离,就让最近到的车皮放在整列火车的最后。因此需要转换站来达成这样的目标,转换站只能在同一个地方进与出。例如有四个车皮1,2,3,4进入,2,4,3,1到站,即2号车皮目的地最远,4号车皮倒数第二远,3号车皮倒数第三远,1号车皮最近。为了能快速指挥车辆进出站转换,小王编写例如下程序a=[1,2,3,4,5,6] #待车皮进站b=[3,2,1,6,5,4] #出站顺序stack=[0]*len(a)top=0stack[top]=a[0]s=str(a[0])+"进"ha=1;hb=0while :while top>-1 and :s=s+str(stack[top])+"出"top-=1if hatop+=1stack[top]=a[ha]s=s+str(a[ha])+"进"ha+=1elif ha==len(a) and top>-1 and :print("无法调度")breakif top==-1:print(s)代码显示结果:1进2进3进3出2出1出4进5进6进6出5出4出(1)修改加框处代码(2)将划线处代码补充完整,使功能完善28.双向链表也叫双链表,也是链表的一中,它的每个数据都有两个指针,分别指向前驱节点和后继节点。在python中用二维列表来模拟双向链表,用包含3个元素的列表来表示每一个节点,其中第一个元素存储数据,后两个元素分别存储指向前驱节点和后继节点的指针。若没有前驱或后继节点则对应的指针值为-1。下列程序产生了一些两位随机正整数,并依次存储到双向链表a中。现要求删除其中值为偶数的节点,请完善代码:import randoma=[]head=-1for i in range(8): node=[ ① ,head,-1] a.append(node) if head!=-1: a[head][2]=i head= ②p=head=0while p!=-1: if a[p][0]%2==0: if ③ : a[a[p][1]][2]=a[p][2] if a[p][2]!=-1: a[a[p][2]][1]=a[p][1] if head==p: head= ④ p=a[p][2]参考答案1.B2.D3.C4.D5.C6.D7.C8.C9.C10.B11.B12.D13.A14.C15.A16.C17.C18.B19.D20.D21.D22.B23.D24.C25.D26.2 k=ord(d[0])—ord(“a”) q != -1 and d>data[q][0] info[k]=i data[p][1]27.top>-1 and hb<=len(b) stack[top]==b[hb] hb+=1 stack[top]!=b[hb]28.random.randint(10,99) i a[p][1]!=-1 a[p][2] 展开更多...... 收起↑ 资源预览