内容正文:
第二章 数据的存储方式
学校:___________姓名:___________班级:___________考号:___________
一、选择题
1.如果一个链表的头指针为head,要访问链表中第i个节点,需要进行几次指针移动( )
A.i次 B.i-1次 C.i+1次 D.无法确定,取决于链表长度
2.在单向链表中,如何访问第n个节点( )
A.从头节点开始遍历n次 B.通过下标直接定位
C.从尾节点开始反向遍历n次 D.无法直接访问,必须遍历整个链表
3.有关数组特征描述中,下列说法不正确的是( )
A.同一数组中,每个数组元素的数据类型是相同的
B.通过数组名和下标可以对数组中任意位置的数组元素进行高效访问
C.数组的存储空间固定不变
D.数组是非顺序存储结构
4.语句Dim a&(1 To 20),b#(2,-1 To 1)定义两个数组,其类型分别为: ( )
A.二维单精度实型数组和二双精度型数组
B.二维长整型数组和二维单精度实型数组
C.一维单精度实型数组和二维整型数组
D.一维长整型数组和二维双精度型数组
5.设有一个5×8的二维数组a,若按行优先的顺序存储数组元素,则元素a[3][5]前面元素的个数为( )
A.21 B.22 C.29 D.37
6.链表中的节点通常包含哪两部分( )
A.数据域和控制域 B.数据域和指针域 C.指令域和地址域 D.标志域和内容域
7.数组是一种采用哪种存储结构的数据结构( )
A.顺序存储结构 B.非顺序存储结构 C.索引存储结构 D.散列存储结构
8.使用链表结构模拟某校游玩路线,链表a中每一个节点包含三个数据,第1个为景点名称,第2个为预计游玩时间(单位:分钟),第3个为下一个景点指针。该校可以从多个景点开始游玩,但只能从“南大门”离开,输出显示从各景点进入路线及预计总时间的代码如下。a=[["校训石",21,2],["行政楼",40,2],["风雨操场",50,5],["丽泽湖",30,4],["西餐厅",60,5],["南大门",20,-1]]
head=[0,1,3]
for i in range(len(head)):
(1)
s=a[p][1]
while a[p][2]!=-1:
print(a[p][0],end="→")
(2)
(3)
print(a[p][0])
print("预计时间:",s,"分钟")
上述程序划线处的可选代码有:
①p=head ②p=head[i] ③s=s+a[p][1] ④p=a[p][2]
则(1)、(2)、(3)处代码依次为( )
A.①③④ B.①④③ C.②③④ D.②④③
9.链表和数组在存储空间上的主要区别是什么( )
A.链表需要连续的内存空间,数组则不需要 B.数组需要连续的内存空间,链表则不需要
C.两者都需要连续的内存空间 D.两者都不需要连续的内存空间
10.在一个列表a中隐藏着一个链表,a=[[4,0],[5,2],[7,4],[8,5],[6,3],[1,-1]]。链表节点a[i]中,a[i][0]表示数据,a[i][1]表示指针,下列说法正确的是( )
A.链表的两个相邻节点,其存储空间必须连续 B.该隐藏链表的表头head=2
C.该隐藏链表有5个节点 D.代码“a[i][1]=a[i+1][1]”可以实现删除节点“i+1”
11.创建一个空链表时,通常会设置什么来表示链表的起始( )
A.尾指针 B.头指针指向一个空节点
C.头指针指向NULL或-1 D.无需设置特殊标记
12.运用Python编程处理数据时,经常会用到pandas库,其中Series是一维数据结构,下图程序运行后的结果
A.水蜜桃 B.3 C.水蜜桃 D.“猕猴桃” ”水蜜桃”
13.a数组定义如下:a=[2,5,0,3,6,8],则运算表达式“a[1]+a[3]+a[5]”的结果为( )
A.16 B.8 C.10 D.13
14.使用列表d模拟链表结构(节点数大于0)每个节点包含数据区域和指针区域,h为头指针。链表中各节点已按数据区域中数值的绝对值由小到大排列,如图a所示。现要修改该链表各节点的链接关系,使链表各节点按数据区域中的数值由小到大排列,结果如图b所示。实现该功能的程序段如下,方框中应填入的正确代码为( )
图a 图b
t = h
p = d[h][1]
while p != -1:
q = d[p][1]
p = q
d[t][1]=-1
A. B. C. D.
15.某单向链表如下图所示,若要将数据data3和data4同时从链表中移除,至少需要修改几个节点的指针( )
A.1 B.2 C.3 D.4
16.下列关于数据结构的说法,不正确的是( )
A.数组、链表、队列和栈都是常见的线性表数据结构
B.数组的存储空间是连续的,链表的存储空间可以是不连续的
C.每个链表必定有一个头指针,同一链表中每个节点的结构均相同
D.对数组进行操作时,若某数组元素被删除,数组占用的存储空间会变小
17.下列有关链表的描述,不正确的是( )
A.要取出链表中的元素时,需要知道该元素在链表中的位置
B.要访问链表中的元素,只能从头节点开始遍历
C.在链表的首尾之间增加链接,就形成了循环链表
D.链表的存在形式主要有单向链表、双向链表和循环链表
18.子序列是指数组中连续的若干个元素(至少1个元素)。数组a中有n个整型元素(有正有负),现要查找和最大的子序列,并输出和。实现该功能的程序段如下,方框中应填入的正确代码为( )
def maxsub(a):
tot=-1; tmp = 0
for num in a:
tmp += num
return tot
a = [-2,1,-3,4,-1,2,1,-5,4]
print(maxsub(a))
A. B. C. D.
19.设有数组定义语句:Dim a(5) As Integer,Listl 为列表框控件。下列给数组元素赋值的语句,错误的是( )。
A.a(3)=3
B.a(3)=VAL(InputBox(“InputData”)
C.a(3)=Listl.ListIndex
D.a=Array(1,2,3,4,5,6)
20.下列关于链表节点插入操作的描述,哪个是正确的( )
A.插入操作总是从链表头部开始
B.只需要修改新节点的指针域即可完成插入
C.必须先找到插入位置的前驱节点,再修改前驱节点的指针域
D.链表插入操作的时间复杂度总是O(1)
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查链表。要访问链表中第i个节点,从头节点开始需经过i-1个节点的指针移动。故选择B。
2.A
【详解】本题考查链表。从头节点开始遍历n次 - 在单向链表中,要访问第n个节点,必须从头节点开始,逐个遍历直到到达目标节点。故选择A。
3.D
【详解】本题主要考查数组特征。同一数组中,每个数组元素的数据类型是相同的;通过数组名和下标可以对数组中任意位置的数组元素进行高效访问;数组的存储空间固定不变;数组是顺序存储结构,故本题选D选项。
4.D
【详解】本题主要考查数组的定义。符号“%”表示短整型,“&”表示长整型,“!”表示单精度浮点型,“#”表示双精度浮点型,故语句Dim a&(1 To 20),b#(2,-1 To 1)定义两个数组,其类型分别为一维长整型数组和二维双精度型数组,故本题选D选项。
5.C
【详解】本题主要考查Python二维数组结构。有一个5 × 8的二维数组a,若按行优先的顺序存储数组元素,则元素a 3| 5|前面元素的个数为29个。其中第一行为a0开头共8个元素,第二行以a [1]开头为8个元素,第三行以a [2]开头为8个元素,第四行以a [3]开头,到a [3] [5]前面有5个元素,所以共有3* 8+ 5 = 29,故本题选C选项。
6.B
【详解】本题考查链表。数据域:用于存储节点的数据信息。指针域:用于存储指向下一个节点的指针。故选择B。
7.A
【详解】本题考查数组。数组是一种典型的采用顺序存储结构的数据结构。在顺序存储结构中,数组元素在内存中是连续存储的,元素之间的逻辑关系和物理关系是一致的。通过索引可以快速定位到数组中的任意元素。故选择A。
8.D
【详解】本题考查的是链表。head列表里存放的是开始景点的指针。p表示头结点,故第一空应为:p=head[i] ;由于内循环开始前已经把头结点的时间存储到s中,故内循环要先指向下一个指针,再累加时间,故第二空应为:p=a[p][2],第三空应为:s=s+a[p][1]。选项D正确。
9.B
【详解】本题考查数组和链表。 数组的元素在内存中连续存储,而链表的节点可以分散在内存的不同位置。故选择B。
10.C
【详解】本题考查链表。A选项错误,链表的相邻节点存储时不需要连续空间。B选项错误,该隐藏链表的表头head=1。D选项错误,删除节点“i+1”的代码是“a[i][1]=a[a[i][1]][1]”。故答案为:C。
11.C
【详解】本题考查链表。创建空链表时,通常会将头指针设置为一个表示空的值,如NULL(在C/C++中)或-1(在某些特定场景下的约定)。故选择C。
12.B
【详解】本题考查的是pandas库相关知识。Series中如果没有指定索引,索引值就从 0 开始,故s[2]值为3,故选项B正确。
13.A
【详解】本题主要考查数组运算。数组索引是从0开始,故a[1]+a[3]+a[5]=5+3+8=16,故本题选A选项。
14.C
【详解】本题考查单链表及分支语句和数据排序等知识。 由于数据区域中数值的绝对值由小到大排列,由代码可知,原先的节点关系是:t→p→q,若数据区域d[p][0]的数值为正数,则原链表节点关系不变,只需将各节点关系往下迭代即可,即:t变为p,p变为g即可。若数据区域d[p][0]的数值为负数,则原先的链表各节点关系需要重新指向,由于原数据是按照绝对值大小排序的,因此越往后面绝对值数越大,因此其相反数(负数)就越小,这样每一个当前节点p的负数肯定是当前链表中最小的数,因此该数应该变为最小的头节点,采用头插法可以实现,即将当前节点p的指针域指向原先的头节点h,然后再将头节点h变为当前节点p。故本题选C。
15.A
【详解】本题考查的是链表相关知识。由图中可知若要将数据data3和data4同时从链表中移除,至少要修改data2的指针指向data5,故本题应选A。
【点睛】
16.D
【详解】本题考查的是数据结构。数组的存储空间都是固定不变的,若某数组元素被删除,数组占用的存储空间不会变。故选D。
17.A
【详解】本题考查链表。在链表中组织处理数据时,不需要知道数据元素实际所处的具体位置,只需知道数据之间相互链接的顺序,因此答案为A。
18.C
【详解】本题考查的知识点是子序列的相关知识。子序列是指数组中连续的若干个元素(至少1个元素)。依题意知:数组a中和最大的子序列为[4,-1,2,1],和为6。A选项运行结果为4,B选项运行结果为4,C选项运行结果6,D选项运行结果为1。故答案为C选项。
19.D
【详解】本题主要考查数组的赋值。array()函数的作用:返回一个包含数组的Variant(可变的),题干定义了一个容量固定的数组a(Dim a(5) As Integer),故赋值语句a=Array(1,2,3,4,5,6)是错误的,故本题选D选项。
20.C
【详解】本题考查链表。必须先找到插入位置的前驱节点,再修改前驱节点的指针域,C该选项描述了链表插入操作的正确步骤,需要先定位到插入位置的前驱节点,然后修改其指针指向新节点。故答案为:C。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$