2026年03月CCF GESP C++五级单选题(共15题,每题2分,满分30分)
- 关于单链表、双链表和循环链表,下列说法正确的是?( )
{{ select(1) }}
- 在单链表中,若已知任意结点的指针,则可以在O(1)时间内删除该结点
- 循环链表中一定不存在空指针
- 在循环双链表中,尾结点的next指针一定为nullptr
- 在带头结点的循环单链表中,判定链表是否为空只需判断头结点的next是否指向自身
- 双向循环链表中要在结点p之前插入新结点s(均非空),以下指针操作正确的是?( )
{{ select(2) }}
- s->next = p; p->prev = s; p->next = s; s->prev = p;
- s->prev = p; s->next = p->next; p->next->prev = s; p->next = s;
- s->prev = p->prev; s->next = p; p->prev->next = s; p->prev = s;
- s->prev = nullptr; s->next = p; p->prev = s;
- 下面函数用“哑结点”统一处理删除单向链表中的头结点与中间结点,横线处应填?( )
{{ select(3) }}
- cur = cur->next;
- cur->next = del->next;
- del->next = cur->next;
- cur->next = nullptr;

- 对
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }实现的欧几里得算法,执行gcd(48, 18)得到的调用序列为?( )
{{ select(4) }}
- gcd(48,18) -> gcd(18,12) -> gcd(12,6) -> gcd(6,0)
- gcd(48,18) -> gcd(30,18) -> gcd(12,18)
- gcd(48,18) -> gcd(18,30) -> gcd(30,6)
- gcd(48,18) -> gcd(12,18) -> gcd(6,12)
- 下面代码实现了欧拉(线性)筛,横线处应填写?( )
{{ select(5) }}
- j <= n
- j < sqrt(n)
- j < primes.size()
- j < i

- 埃氏筛中将内层循环从j = ii开始而不是j = 2i的主要原因是?( )
{{ select(6) }}
- 因为2*i一定不是合数
- i*i一定是质数
- 小于i*i的i的倍数已被更小质因子筛过
- 这样可以把时间复杂度降为O(n)

- 执行指定代码(check函数判断能否选k个元素间距≥dist,solve函数二分求最大dist),输入n=5、k=3、a=[1,2,8,4,9],运行结果为?( )
{{ select(7) }}

- 在升序数组中查找第一个大于等于x的位置,下面循环中横线应填?( )
{{ select(8) }}
- r = mid;
- r = mid - 1;
- l = mid;
- l = mid + 1;

- 关于递归函数调用,下列说法错误的是?( )
{{ select(9) }}
- 递归调用层次过深时,可能会耗尽栈空间导致栈溢出
- 尾递归函数可以通过编译器优化来避免栈溢出
- 所有递归函数都可以通过循环结构来改写,从而避免栈溢出
- 栈溢出发生时,程序会抛出异常并可以继续执行后续代码
- 给定n根木头,要切成不少于m段等长木段,求最大可能长度,check函数判断长度x是否可行,横线处应填写?( )
{{ select(10) }}
- l = mid + 1; r = mid - 1;
- l = mid - 1; r = mid + 1;
- l = mid + 1; r = mid;
- l = mid; r = mid + 1;

- 下面代码用分治求“最大连续子段和”,其时间复杂度为?( )
{{ select(11) }}
- O(1)
- O(n)
- O(n log n)
- O(n²)

- A组[12,35,67,89]、B组[20,45,55,78]均升序,归并合并为有序排行榜的核心循环,横线处应填入?( )
{{ select(12) }}
- A[i] >= B[j]
- A[i] <= B[j]
- i >= j
- i <= j

- 对已从小到大排好序的n位同学成绩,执行以第一个元素为pivot的快速排序,此次排序的时间复杂度是?( )
{{ select(13) }}
- O(1)
- O(n)
- O(n log n)
- O(n²)

- 下面关于排序算法的描述中,不正确的是?( )
{{ select(14) }}
- 冒泡排序和插入排序都是稳定的排序算法
- 快速排序和归并排序都是不稳定的排序算法
- 冒泡排序和插入排序最好时间复杂度均为O(n)
- 归并排序在最好、最坏和平均三种情况的时间复杂度均为O(n log n)
- 下面代码实现大整数(字符串表示)除以小整数(int表示),横线处应该填写?( )
{{ select(15) }}
- rem /= b;
- rem %= b;
- rem = b;
- rem = q;
