题号123456789101112131415
答案CCADCDBAABCBADB
C++ 五级
2024 年 12 月
1单选题(每题 2 分,共 30 分)
第 1 题 下面关于链表和数组的描述,错误的是( )。
A. 当数据数量不确定时,为了应对各种可能的情况,需要申请一个较大的数组,可能浪费空间;此时用链表比
较合适,大小可动态调整。
B. 在链表中访问节点的效率较低,时间复杂度为 。
C. 链表插入和删除元素效率较低,时间复杂度为 。
D. 链表的节点在内存中是分散存储的,通过指针连在一起。
第 2 题 在循环单链表中,节点的 next 指针指向下一个节点,最后一个节点的 next 指针指向( )。
A. 当前节点
B. nullptr
C. 第一个节点
D. 上一个节点
第 3 题 为了方便链表的增删操作,一些算法生成一个虚拟头节点,方便统一删除头节点和其他节点。下面代码实现
了删除链表中值为val的节点,横线上应填的最佳代码是( )。
struct LinkedNode {
int val;
LinkedNode* next;
LinkedNode(int val):val(val), next(nullptr){}
};
void removeElements(LinkedNode* head, int val) {
if (head == nullptr) {
return;
}
LinkedNode* cur;
LinkedNode* dummyHead = new LinkedNode(0); //虚拟头节点
________________________________ // 在此处填入代码
while(cur ->next != nullptr) {
if(cur->next->val == val) {
LinkedNode* tmp = cur->next;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A. dummyHead->next = head; cur = dummyHead;
B. dummyHead->next = head->next; cur = dummyHead;
C. dummyHead->next = head; cur = dummyHead->next;
D. dummyHead->next = head->next; cur = dummyHead->next;
第 4 题 对下面两个函数,说法错误的是( )。
A. 两个函数的实现的功能相同。
B. fibA采用递推方式。
C. fibB采用的是递归方式。
D. fibA时间复杂度为 ,fibB的时间复杂度为 。
第 5 题 两块长方形土地的长宽分别为 和 米,要将它们分成正方形的小块,使得正方形的尺寸尽可能大。小杨
采用如下的辗转相除函数gcd(24, 36)来求正方形分块的边长,则函数gcd调用顺序为( )。
cur->next = cur->next->next;
delete tmp;
tmp = nullptr;
}
else {
cur = cur ->next;
}
}
head = dummyHead->next;
delete dummyHead;
GESP 2024年12月认证 C++ 5级真题