判断题
1-1
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。
T
1-2
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储最节省时间。
T
1-3
对于顺序存储的长度为N的线性表,删除第一个元素和插入最后一个元素的时间复杂度分别对应为O(1)和O(N)。
F —— 应为 N 和 1
以上三题归纳
1. 新增元素: O(N) (尾插是O(1),不考虑扩容的情况)
2. 查找元素: O(N)
3. 根据下标获取/修改元素:O(1)
4. 删除元素:O(N)
5. 清除所有元素:O(1)
其中插入删除平均为O(N)
如果插入和删除的是最后一个元素,那么很显然是O(1);
如果是插入和删除的是第一个元素,那么很显然是O ( n );
如果是插入和删除的是第i个元素,那么很显然是O(n-i);
1-4
若用链表来表示一个线性表,则表中元素的地址一定是连续的。
F —— 地址可连续也可不连续
1-5
在具有N个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)
F —— 单链表也称线性链表,对链表的结点进行访问无论是否具体指出访问哪个元素,都要从头遍历链表,所以访问操作的时间复杂度为 O(n) 。增加结点即插入结点,如果指明插入到某个位置则时间复杂度为 O(1) ,如果没有指明插入位置,如 按大小插入,则先要遍历一遍来确定插入的位置然后再插入,此时的时间复杂度为 O(n) 。
选择题
2-1
在N个结点的顺序表中,算法的时间复杂度为O(1)的操作是:
(2分)
A.
访问第i个结点(1≤i≤N)和求第i个结点的直接前驱(2≤i≤N)
B.
在第i个结点后插入一个新结点(1≤i≤N)
C.
删除第i个结点(1≤i≤N)
D.
将N个结点从小到大排序
2-2
对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度为:
(2分)
A.
O(1), O(1)
B.
O(1), O(N)
C.
O(N), O(1)
D.
O(N), O(N)
2-3
若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用哪种存储方式最节省时间?
(2分)
A.
双链表
B.
单循环链表
C.
带头结点的双循环链表
D.
顺序表
2-4
顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。
(2分)
A.
100
B.
105
C.
108
D.
110
2-5
下列函数中,哪两个函数具有相同的增长速度:
(2分)
A.2N 和NN
B.N和2/N
C.N2 logN和NlogN2
D.NlogN2 和NlogN
2-6
算法的时间复杂度取决于( )。
(2分)
A.
问题的规模
B.
待处理数据的初态
C.
计算机的配置
D.
A和B
2-7
已知两个长度分别为m和n的升序链表,若将它们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度是( )。
(2分)
A.
O(n)
B.
O(mn)
C.
O(min(m,n))
D.
O(max(m,n))
2-8
下列代码的时间复杂度是:
for(i=0; i<N; i++)
for(j=0; j<N; j+=1000)
printf("%d,%d\n", i, j);
(2分)
A.
O(N×j)
B.
O(N)
C.
O(N2 )
D.
O(NlogN)
2-9
下面程序段的时间复杂度是 ( )
i = 0;
while(i<=n)
i = i * 3;
(2分)
A.
O(2n)
B.
O(n)
C.
O(n2 )
D.
O(log3 n)
2-10
程序段
FOR i:=n-1 DOWNTO 1 DO
FOR j:=1 TO i DO
IF A[j]>A[j+1]
THEN A[j]与A[j+1]对换;
其中 n为正整数,则最后一行的语句频度在最坏情况下是( )
(2分)
A.
O(n)
B.
O(nlogn)
C.
O(n3 )
D.
O(n2 )
2-11
1、下列叙述中正确的是
(1分)
A.
程序执行的效率与数据的存储结构密切相关
B.
程序执行的效率只取决于程序的控制结构
C.
程序执行的效率只取决于所处理的数据量
D.
以上说法均错误
ABDCD DDCDD A