题目
在 n 个结点的顺序表中,算法的时间复杂度是 O(1)的操作是( )。A. 访问第 i 个结点(1≤i≤n)和求第 i 个结点的直接前驱(2≤i≤n)B. 在第 i 个结点后插入一个新结点(1≤i≤n)C. 删除第 i 个结点(1≤i≤n)D. 将 n 个结点从小到大排序
在 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. 访问第 i 个结点(1≤i≤n)和求第 i 个结点的直接前驱(2≤i≤n)
解析
考查要点:本题主要考查顺序表的基本操作及其时间复杂度的理解。
解题核心:明确顺序表中各项操作的时间复杂度特性,尤其是直接访问和插入/删除操作的差异。
关键点:
- 顺序表的随机访问特性:通过索引直接访问元素的时间复杂度为 $O(1)$。
- 插入/删除操作的线性时间复杂度:需要移动大量元素,时间复杂度为 $O(n)$。
- 排序操作的复杂度:至少为 $O(n \log n)$,远高于 $O(1)$。
选项分析
选项A
- 访问第 $i$ 个结点:顺序表通过数组实现,直接通过索引
array[i-1]
访问,时间复杂度为 $O(1)$。 - 求第 $i$ 个结点的直接前驱($2 \leq i \leq n$):直接前驱为第 $i-1$ 个结点,同样通过索引
array[i-2]
访问,时间复杂度为 $O(1)$。
结论:两个操作均为 $O(1)$,符合条件。
选项B
- 在第 $i$ 个结点后插入新结点:需将第 $i$ 个结点及之后的所有元素后移一位,涉及 $n-i+1$ 次移动操作,时间复杂度为 $O(n)$。
结论:不符合条件。
选项C
- 删除第 $i$ 个结点:需将第 $i+1$ 个结点及之后的所有元素前移一位,涉及 $n-i$ 次移动操作,时间复杂度为 $O(n)$。
结论:不符合条件。
选项D
- 排序操作:无论采用何种排序算法,时间复杂度最低为 $O(n \log n)$(如快速排序、归并排序),远高于 $O(1)$。
结论:不符合条件。