#GESP260605T2. 【GESP26年6月五级】判断题(每题 2 分,共 20 分)
第 16 题 数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。( )
{{ select(16) }}
- 对
- 错
第 17 题 带哨兵头尾节点的双向循环链表,在表头插入节点 p ,以下四步操作无论什么顺序执行结果都正确。( )
① p->next = head->next;
② p->prev = head;
③ head->next->prev = p;
④ head->next = p;
{{ select(17) }}
- 对
- 错
第 18 题 对任意正整数 a 、 b ,以下两种写法的 gcd 函数返回值完全相同。( )
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int gcd2(int a, int b) {
while (b) {
int t = a % b;
a = b;
b = t;
}
return a;
}
{{ select(18) }}
- 对
- 错
第 19 题 在归并排序的合并阶段中,如下代码可以正确地将两个已排序的子数组 L 和 R 合并到数组 arr。( )
void mergeArray(int arr[], int low, int mid, int right) {
int n1 = mid - low + 1;
int n2 = right - mid;
int L[n1], R[n2];
for (int i = 0; i < n1; i++) L[i] = arr[low + i];
for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];
int i = 0, j = 0, k = low;
while (i < n1 && j < n2) {
if (L[i] <= R[j])
arr[k++] = L[i++];
else
arr[k++] = R[j++];
}
while (i < n1) arr[k++] = L[i++];
while (j < n2) arr[k++] = R[j++];
}
{{ select(19) }}
- 对
- 错
第 20 题 分治法通常将一个规模较大的问题拆分为若干个规模较小、结构相似的子问题,这些子问题可以相互独立地求解。( )
{{ select(20) }}
- 对
- 错
第 21 题 快速排序是一种稳定的排序算法,即对于值相等的元素,排序后它们的相对顺序与排序前一定相同。( )
{{ select(21) }}
- 对
- 错
第 22 题 以下两段代码的运行结果完全相同。( )
void fill1(int n) {
for (int k = 1; k <= n; k *= 2)
cout << k << " ";
}
void fill2(int n) {
int k = 1;
while (k < n) {
cout << k << " ";
k *= 2;
}
}
{{ select(22) }}
- 对
- 错
第 23 题 一个大于1的自然数都可以唯一地分解为若干个不同质数的乘积,且每个质因数只出现一次。( )
{{ select(23) }}
- 对
- 错
第 24 题 线性筛法的时间复杂度为 O(n),每个合数只被其最小质因数筛除一次。( )
{{ select(24) }}
- 对
- 错
第 25 题 归并排序是一种原地排序算法,不需要额外的存储空间。( )
{{ select(25) }}
- 对
- 错