一.判断题
数据元素是数据的最小单位。 T
O(N^2) is the same as O(1+2+3+⋯+N). T
数据的逻辑结构是指数据的各数据项之间的逻辑关系。 F
(neuDS)数据的物理结构是指数据在计算机中的实际存储形式。 T
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。 T
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。 T
题目字眼 “ 顺序存储 ” ,说明内存单元中分配的存储空间是连续的,所 以该线性表为数组形式存储,所以数组访问时,通过下标可随机访问,时间复杂度为O(1),而增加插入时,需要涉及大量元素的移动,所以时间复杂度为O(N)。
对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。 F (两个时间复杂度应该反过来)
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。
答案 False
解析1).单链表访问前驱结点的时间复杂度为O(N),访问后继结点的时间复杂度为O(1)。
2).增加结点也分为前插和后插两种情况:前插的时间复杂度为O(N),后插的时间复杂度为O(1)。
原因如下 :访问(增加)前驱结点需要从头开始顺序访问,而访问(增加)后继结点只需要进行一次间接寻址的操作。
在顺序表上进行插入、删除操作时需要移动元素的个数与待插入或待删除元素的位置无关。 F
顺序表上进行删除操作时与待删除元素位置有关。
数据元素可以由类型互不相同的数据项构成。 T
顺序存储的线性表不支持随机存取。F
存数和取数的时候是随机的,不需要顺序遍历
所谓随机存取,就是通过首地址和元素的位序号值可以在O(1)的时间内找到指定的元素。T
顺序存储方式只能用于存储线性结构。F
顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。
若用链表来表示一个线性表,则表中元素的地址一定是连续的。F
链表不一定是连续的
2^n和n^n具有相同的增长速度。F
在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。 T
数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构。 F
数据结构概念包括数据之间的逻辑结构、数据在计算机中的存储方式和数据的运算三个方面。 T
算法分析的两个主要方面是时间复杂度和空间复杂度的分析。 T
将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(logN)。 F (二分查找不能使用链表)
二 .单选题
1.
f ( A > B ) {
for ( i=0; ii; j-- )
A += B;
}
else {
for ( i=0; ii; j-- )
A += B;
}
的时间复杂度( D )
A.O(N)
B.O(N^4)
C.O(N^2)
D.O(N^3)
2.通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( D)。
A.数据在同一范围内取值
B.数据元素所包含的数据项的个数要相等
C.每个数据元素都一样
D.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致
3.以下数据结构中,(A )是非线性数据结构。
A.树
B.字符串
C.队列
D.栈
4.下列哪个函数是O(N)的?(C)
A.2NlogN
B.N^2/2
C.logN^2
D.N(logN)^2
5.与数据元素本身的形式、内容、相对位置、个数无关的是数据的( B)。
A.运算实现
B.逻辑结构
C.存储实现
D.存储结构
6.以下说法正确的是(B )。
A.数据项是数据的基本单位
B.一些表面上很不相同的数据可以有相同的逻辑结构
C.数据元素是数据的最小单位
D.数据结构是带有结构的各数据项的集合
7.在数据结构中,从逻辑上可以把数据结构分成( B)。
A.动态结构和静态结构
B.线性结构和非线性结构
C.内部结构和外部结构
D.紧凑结构和非紧凑结构
8.下面代码段的时间复C)。
s=0;
for ( i=0; i
A.O(n)
B.O(1)
C.O(n^2)
D.O(log2n)
9.算法的时间复杂度取决于(B )。
A.A和B
B.待处理数据的初态
C.问题的规模
D.计算机的配置
10.给定N×N×N的三维数组A,则在不改变数组的前提下,查找最小元素的时间复杂度是:(B)
A.O(N2logN)
B.O(N^3)
C.O(NlogN)
D.O(N^2)
11.数组A[1..5,1..6]每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为:
A.1120
B.1125
C.1140
D.1145
12.在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:
A:访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)
B:在第i个结点后插入一个新结点(1≤i≤N)
C:删除第i个结点(1≤i≤N)
D:将N个结点从小到大排序
A.假设顺序表L,长度为n,求第i个节点L[i],直接前驱L[i-1],因此为O(1) B需要移动n-i个节点,因此为O(n)
C也需要移动n-i个节点 D根据排序方法不同最慢O(n^2),最快O(nlogn)
13.线性表L在什么情况下适用于使用链式结构实现?(A)
A.需不断对L进行删除插入
B.需经常修改L中的结点值
C.L中含有大量的结点
D.L中结点结构复杂
14.链表不具有的特点是:(B)
A.插入、删除不需要移动元素
B.方便随机访问任一元素
C.不必事先估计存储空间
D.所需空间与线性长度成正比
15.在具有N个结点的单链表中,实现下列哪个操作,其算法的时间复杂度是O(N)?
A.在地址为p的结点之后插入一个结点
B.删除开始结点
C.遍历链表和求链表的第i个结点
D.删除地址为p的结点的后继结点
答案 C
解析 A:后插O(1);B:第一个结点O(1);D:直接后继O(1)。
16.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用哪种存储方式最节省运算时间?
A.单链表
B.双链表
C.单循环链表
D.带头结点的双循环链表
ABC想要在最后一个结点之后插入的话,需要从头遍历到尾才能插入,此时是O(N).
而D可以通过指向上一个结点的指针立刻得到最后一个结点以及倒数第二个结点,然后进行插入和删除操作,此时是O(1).
17.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用什么存储方式最节省运算时间?
A.单链表
B.仅有头指针的单循环链表
C.双链表
D.仅有尾指针的单循环链表
选项A、单链表插入最后一个元素需要遍历链表到最后一个元素。
选项B、仅有头指针,删除第一个元素方便,但是末尾插入一个元素同选项A。
选项C、双链表,方便来回遍历但是末尾插入一个元素依旧需要遍历整个链表。
选项D、有尾指针的循环单链表,可以在末尾插入元素后,尾指针移动一次至首结点删除第一个结点。
故D选项最节约运算时间。
18.将线性表La和Lb头尾连接,要求时间复杂度为O(1),且占用辅助空间尽量小。应该使用哪种结构?
A.单链表
B.单循环链表
C.带尾指针的单循环链表
D.带头结点的双循环链表
19.
对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为(C)
A.O(1)
B.O(N/2)
C.O(N)
D.O(N2)
在指定节点后插入节点需要遍历链表查找条件节点,再进行插入。所以复杂度为O(n)。
20.设h
为不带头结点的单向链表。在h
的头上插入一个新结点t
的语句是:(D)
A.h=t; t->next=h->next;
B.t->next=h->next; h=t;
C.h=t; t->next=h;
D.t->next=h; h=t;
题目中说明要保证 h 始终指向头节点
21.在单链表中,若p
所指的结点不是最后结点,在p
之后插入s
所指结点,则执行(c)
A.s->next=p; p->next=s;
B.s->next=p->next; p=s;
C.s->next=p->next; p->next=s;
D.p->next=s; s->next=p;
22.带头结点的单链表h
为空的判定条件是:(B)
A.h == NULL;
B.h->next == NULL;
C.h->next == h;
D.h != NULL;
23.对于一非空的循环单链表,h
和p
分别指向链表的头、尾结点,则有:(A)
A.p->next == h
B.p->next == NULL
C.p == NULL
D.p == h
24.将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是:(B)
A.1
B.N
C.2N
D.NlogN
最好的情况就是前面的链表有序,后面的链表也有序,则最少比较次数就是N
25.已知表头元素为c
的单链表在内存中的存储状态如下表所示:
现将f
存放于1014H
处,并插入到单链表中,若f
在逻辑上位于a
和e
之间,则a
、e
、f
的“链接地址”依次
是:
A.1010H
, 1014H
, 1004H
B.1010H
, 1004H
, 1014H
C.1014H
, 1010H
, 1004H
D.1014H
, 1004H
, 1010H
由于f要插入a和e之间,所以a的链接地址指向f的地址,其余链接地址保持不变,故选D
26.
以下关于顺序表的说法中,正确的是( C)。
A.在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻
B.顺序表可以利用一维数组表示,因此顺序表与一维数组在结构上是一致的,它们可以通用
C.顺序表和一维数组一样,都可以按下标随机(或直接)访问,顺序表还可以从某一指定元素开始,向前或向后逐个元素顺序访问
D.在顺序表中每一表元素的数据类型还可以是顺序表
解释:
选项A中的说法是错误的,因为在顺序表中,逻辑上相邻的元素在物理位置上一定相邻;
选项B中的说法是错误的,因为虽然顺序表可以利用一维数组表示,但它们在结构上并不一致,不能通用;
选项D中的说法是错误的,因为在顺序表中每一表元素的数据类型只能是基本数据类型或结构体类型,不能是顺序表类型。
因此,只有选项C中的说法是正确的,顺序表和一维数组一样,都可以按下标随机(或直接)访问,顺序表还可以从某一指定元素开始,向前或向后逐个元素顺序访问。
27.在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:(A)
A.访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)
B.删除第i个结点(1≤i≤N)
C.在第i个结点后插入一个新结点(1≤i≤N)
D.将N个结点从小到大排序
访问第i个结点和求第i个结点的直接前驱都可以通过数组下标直接访问,时间复杂度为O(1)。删除第i个结点和在第i个结点后插入一个新结点都需要移动其他结点,时间复杂度为O(N)。将N个结点从小到大排序的时间复杂度最好也是O(NlogN),最坏情况下是O(N^2)。
28.适用于压缩存储稀疏矩阵的两种存储结构是:(C)
A.十字链表和二叉链表
B.三元组表和邻接矩阵
C.三元组表和十字链表
D.邻接矩阵和十字链表
稀疏矩阵是指矩阵中大部分元素为0的矩阵。对于稀疏矩阵,使用普通的二维数组存储会浪费大量的空间。因此,需要使用一些特殊的数据结构来压缩存储稀疏矩阵。三元组表和十字链表都是常用的稀疏矩阵存储结构。三元组表使用三个数组来存储稀疏矩阵的非零元素的行、列和值,可以有效地压缩存储稀疏矩阵。十字链表则是将矩阵分成行链表和列链表两部分,每个非零元素在行链表和列链表中都有一个结点,可以方便地进行行和列的遍历和操作。
29.对于一个具有N个结点的单链表,在给定值为x的结点后插入一个新结点的时间复杂度为(C)
A.O(N/2)
B.O(1)
C.O(N)
D.O(N2)
Explanation: 在一个具有N个结点的单链表中,在给定值为x的结点后插入一个新结点需要遍历链表找到值为x的结点,这个过程最坏情况下需要遍历整个链表,时间复杂度为O(N)。找到值为x的结点后,插入新结点只需要常数时间,时间复杂度为O(1)。因此,整个操作的时间复杂度为O(N)。
30.
数组A[1..5,1..6]每个元素占5个单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[5,5]的地址为:(C)
A.1125
B.1140
C.1120
D.1145
Explanation: 数组A[1..5,1..6]中每个元素占5个单元,因此第一行的元素存储在地址1000~1024的连续内存单元中,第二行的元素存储在地址1025~1049的连续内存单元中,以此类推。因为按行优先次序存储,所以A[5,5]的地址应该是第五行第五个元素的地址,即1024+4*5=1120。
31.将两个结点数都为N且都从小到大有序的单向链表合并成一个从小到大有序的单向链表,那么可能的最少比较次数是:(D)
A.1
B.NlogN
C.2N
D.N
Explanation: 合并两个有序链表的最少比较次数是O(N),可以使用归并排序的思想,将两个链表合并成一个有序链表。具体地,从两个链表的头结点开始比较,将较小的结点加入新链表中,直到其中一个链表为空。然后将另一个链表中剩余的结点加入新链表中。这个过程中,每个结点最多被比较一次,因此比较次数为O(N)。
32.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)
A.部分地址必须是连续的
B.一定是不连续的
C.必须是连续的
D.连续或不连续都可以