题号123456789101112131415
答案AABBDCADABCAADB
C++ 五级
2025 年 03 月
1单选题(每题 2 分,共 30 分)
第 1 题 链表不具备的特点是( )。
A. 可随机访问任何一个元素
B. 插入、删除操作不需要移动元素
C. 无需事先估计存储空间大小
D. 所需存储空间与存储元素个数成正比
第 2 题 双向链表中每个结点有两个指针域prev和next,分别指向该结点的前驱及后继结点。设p指向链表中的
一个结点,它的前驱结点和后继结点均非空。要删除结点p,则下述语句中错误的是( )。
A.
B.
C.
D.
p->next->prev = p->next;
p->prev->next = p->prev;
delete p;
1
2
3
p->prev->next = p->next;
p->next->prev = p->prev;
delete p;
1
2
3
p->next->prev = p->prev;
p->next->prev->next = p->next;
delete p;
1
2
3
p->prev->next = p->next;
p->prev->next->prev = p->prev;
delete p;
1
2
3
第 3 题 假设双向循环链表包含头尾哨兵结点(不存储实际内容),分别为head和tail,链表中每个结点有两个指
针域prev和next,分别指向该结点的前驱及后继结点。下面代码实现了一个空的双向循环链表,横线上应填的最
佳代码是( )。
A.
B.
C.
D.
第 4 题 用以下辗转相除法(欧几里得算法)求gcd(84, 60)的步骤中,第二步计算的数是( )。
// 链表结点
template <typename T>
struct ListNode {
T data;
ListNode* prev;
ListNode* next;
// 构造函数
explicit ListNode(const T& val = T())
: data(val), prev(nullptr), next(nullptr) {}
};
struct LinkedList {
ListNode<T>* head;
ListNode<T>* tail;
};
void InitLinkedList(LinkedList* list) {
list->head = new ListNode<T>;
list->tail = new ListNode<T>;
________________________________ // 在此处填入代码
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
list->head->prev = list->head;
list->tail->prev = list->head;
1
2
list->head->next = list->tail;
list->tail->prev = list->head;
1
2
list->head->next = list->tail;
list->tail->next = list->head;
1
2
list->head->next = list->tail;
list->tail->next = nullptr;
1
2
A. 84和60
B. 60和24
C. 24和12
D. 12和0
第 5 题 根据唯一分解定理,下面整数的唯一分解是正确的( )。
A. 18 = 3 × 6
B. 28 = 4 × 7
C. 36 = 2 × 3 × 6
D. 30 = 2 × 3 × 5
第 6 题
CCF GESP 2025年3月认证 C++ 5级试题