林老师 · 客观题题库 · 专题 S04 栈·队列·递归与递推 · 复习强化

专题 S04 栈·队列·递归与递推 · 复习强化

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-专题S04栈-队列-递归与递推-复习强化
题目总数108 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 9 大部分,合计 108 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

栈深入

12 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

空栈 SS,对序列 a,b,c,d,e,f 依次执行:进栈、进栈、出栈、进栈、进栈、出栈。操作完成后栈底元素为( )。(2020 年 CSP-S 真题)

(1 分)
第 2 题 A2 未作答

空栈依次执行 push(1) push(2) pop() push(3) push(4) pop() pop(),此时栈中从栈底到栈顶为( )。

(1 分)
第 3 题 A3 未作答

元素 a,b,c,d,e,f 依次进栈,允许进栈退栈交替进行。下列不可能的出栈序列是( )。(2022 年 CSP-S 真题:不允许连续三次退栈)

(1 分)
第 4 题 A4 未作答

出栈序列 fedcba(全逆序)要求进栈 66 个元素后连续退栈 66 次。如果约束"不允许连续三次退栈",这个序列( )。

(1 分)
第 5 题 A5 未作答

元素 e1~e6 依次进栈(允许交替退栈),出栈序列为 e2,e4,e3,e6,e5,e1。栈的容量至少为( )个。

(1 分)
第 6 题 A6 未作答

递归函数在计算机内部通过( )实现。

(1 分)
第 7 题 A7 未作答

main() 调用 f()f() 调用 g(),此时调用栈从底到顶为( )。

(1 分)
第 8 题 A8 未作答

函数 A 调用 BB 调用 CC 返回后 B 也返回,然后 A 调用 DD 开始执行时栈中有( )个帧。

(1 分)
第 9 题 A9 未作答

用栈求中缀表达式 3 + 4 * 2 的值时,读到 * 需要先与栈顶 + 比较优先级,因为( )。

(1 分)
第 10 题 A10 未作答

表达式 a*(b+c)-d 的后缀表达式为( )。(2020 年 CSP-S 真题)

(1 分)
第 11 题 A11 未作答

后缀表达式 23*4+ 的值是( )。

(1 分)
第 12 题 A12 未作答

关于栈的说法,错误的是( )。

(1 分)

队列深入

10 QUESTIONS · 2 POINTS EACH
第 13 题 B1 未作答

广度优先搜索(BFS)一定需要用到的数据结构是( )。(2020 年 CSP-S 真题)

(1 分)
第 14 题 B2 未作答

下面哪个数据结构最适合实现先进先出(FIFO)功能( )。(2024 年 CSP-S 真题)

(1 分)
第 15 题 B3 未作答

"实现撤销操作(最近做的最先撤销)"应使用( );"实现排队叫号(先来先服务)"应使用( )。

(1 分)
第 16 题 B4 未作答

容量为 55 的循环队列,front=3, rear=1,队列中有( )个元素。

(1 分)
第 17 题 B5 未作答

容量为 nn 的循环队列,判满条件 (rear + 1) % n == front 意味着( )。

(1 分)
第 18 题 B6 未作答

队列初始为空,依次执行 enqueue(A) enqueue(B) dequeue() enqueue(C) dequeue(),此时队头和队尾分别是( )。

(1 分)
第 19 题 B7 未作答

用两个队列 Q1, Q2 模拟栈的 pop 操作(弹出最后入队的元素),正确做法是( )。

(1 分)
第 20 题 B8 未作答

优先队列(priority_queue)与普通队列的区别是( )。

(1 分)
第 21 题 B9 未作答

BFS 用队列实现的层序遍历,第 kk 层的点在队列中的特点是( )。

(1 分)
第 22 题 B10 未作答

关于队列的说法,错误的是( )。

(1 分)

双端队列

10 QUESTIONS · 2 POINTS EACH
第 23 题 C1 未作答

双端队列(deque)的特点是( )。

(1 分)
第 24 题 C2 未作答

deque<int> d 依次执行 push_back(1) push_front(2) push_back(3) push_front(4),从前往后为( )。

(1 分)
第 25 题 C3 未作答

dequepush_front(x) 等价于( )。

(1 分)
第 26 题 C4 未作答

deque<int> d = {1,2,3,4} 执行 pop_front()pop_back() 后,d 变为( )。

(1 分)
第 27 题 C5 未作答

dequevector 的主要区别是( )。

(1 分)
第 28 题 C6 未作答

queue(队列容器适配器)与 deque(双端队列容器)的关系是( )。

(1 分)
第 29 题 C7 未作答

"滑动窗口"问题:长度为 kk 的窗口从左到右滑动,每步求窗口内的最大值。暴力做法 O(nk)O(nk),用单调队列可优化到( )。

(1 分)
第 30 题 C8 未作答

下列最适合用 deque 的场景是( )。

(1 分)
第 31 题 C9 未作答

01deque<int> d;
02for (int i = 1; i <= 5; ++i) {
03    if (i % 2) d.push_front(i);
04    else d.push_back(i);
05}

执行后 d 从前往后为( )。

(1 分)
第 32 题 C10 未作答

关于 deque错误的是( )。

(1 分)

单调栈与单调队列

12 QUESTIONS · 2 POINTS EACH
第 33 题 D1 未作答

单调栈是指栈内元素从底到顶保持( )的栈。

(1 分)
第 34 题 D2 未作答

维护一个单调递减栈(栈底到栈顶递减),依次入栈 3,1,4,1,53, 1, 4, 1, 5。元素 44 入栈时需要先弹出( )。

(1 分)
第 35 题 D3 未作答

数组 {3,1,4,1,5}\{3, 1, 4, 1, 5\},对每个元素找右边第一个比它大的元素。用单调栈(递减栈)求解,元素 33 的下一个更大元素是( )。

(1 分)
第 36 题 D4 未作答

下列问题最适合用单调栈解决的是( )。

(1 分)
第 37 题 D5 未作答

单调队列是指队列内元素从 front 到 back 保持( ),常用于滑动窗口最值。

(1 分)
第 38 题 D6 未作答

维护单调递减队列(存下标),处理数组 {5,3,8}\{5, 3, 8\}。处理 88 时需要先从队尾弹出( )。

(1 分)
第 39 题 D7 未作答

数组 {1,3,1,3,5,3,6,7}\{1, 3, -1, -3, 5, 3, 6, 7\},窗口大小 k=3k = 3。窗口 [0,2][0, 2](元素 1,3,11, 3, -1)的最大值和窗口 [4,6][4, 6](元素 5,3,65, 3, 6)的最大值分别是( )。

(1 分)
第 40 题 D8 未作答

单调队列与单调栈的本质区别是( )。

(1 分)
第 41 题 D9 未作答

单调栈找"每个元素右边第一个更大元素"的代码框架,栈存的是( )。

(1 分)
第 42 题 D10 未作答

单调队列求滑动窗口最大值的代码中,"从队头弹出"的条件是( )。

(1 分)
第 43 题 D11 未作答

单调栈和单调队列的总时间复杂度都是 O(n)O(n),原因是( )。

(1 分)
第 44 题 D12 未作答

关于单调栈和单调队列,错误的是( )。

(1 分)

递归深入

14 QUESTIONS · 2 POINTS EACH
第 45 题 E1 未作答

在程序运行过程中,如果递归调用的层数过多,可能会由于( )引发错误。(2021 年 CSP-S 真题)

(1 分)
第 46 题 E2 未作答

递归深度 10510^5 的函数(每帧约 100100 字节),总栈空间约( )。

(1 分)
第 47 题 E3 未作答

在 C++ 中,以下哪个函数调用会造成栈溢出( )。(2024 年 CSP-S 真题)

(1 分)
第 48 题 E4 未作答

递归函数 f(n)=f(n1)+nf(n) = f(n-1) + nf(0)=0f(0)=0)可以改写为循环:for(i=1; i<=n; ++i) s += i;。改写的好处是( )。

(1 分)
第 49 题 E5 未作答

尾递归是指( )。

(1 分)
第 50 题 E6 未作答

递归函数 g(n) 调用 g(n-1) 两次(g(0)=1g(0)=1)。g(3)g(3) 的总调用次数是( )。

(1 分)
第 51 题 E7 未作答

01int h(int n) {
02    if (n <= 0) return 0;
03    return h(n / 2) + n;
04}

h(7) 的返回值是( )。

(1 分)
第 52 题 E8 未作答

01void p(int n) {
02    if (n == 0) { cout << "*"; return; }
03    p(n - 1);
04    cout << n;
05    p(n - 1);
06}

p(2) 输出( )。

(1 分)
第 53 题 E9 未作答

01int q(int a, int b) {
02    if (b == 0) return a;
03    return q(b, a % b);
04}

q(12, 8) 的返回值是( )(辗转相除法)。

(1 分)
第 54 题 E10 未作答

递归与分治的关系是( )。

(1 分)
第 55 题 E11 未作答

设计递归函数时最重要的安全措施是( )。

(1 分)
第 56 题 E12 未作答

调试递归函数最有效的方法是( )。

(1 分)
第 57 题 E13 未作答

朴素斐波那契递归 fib(30) 需要约 2301092^{30} \approx 10^9 次调用,但加记忆化后只需( )次。

(1 分)
第 58 题 E14 未作答

关于递归,错误的是( )。

(1 分)

递推深化

14 QUESTIONS · 2 POINTS EACH
第 59 题 F1 未作答

递推与递归的关系是( )。

(1 分)
第 60 题 F2 未作答

递推 f(n)=f(n1)+3f(n) = f(n-1) + 3f(1)=1f(1) = 1f(5)=?f(5) = ?( )。

(1 分)
第 61 题 F3 未作答

斐波那契 f(1)=1,f(2)=1,f(n)=f(n1)+f(n2)f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2)f(8)=?f(8) = ?( )。

(1 分)
第 62 题 F4 未作答

递推 f(1)=1,f(2)=2,f(n)=f(n1)+f(n2)f(1)=1, f(2)=2, f(n) = f(n-1) + f(n-2)f(6)=?f(6) = ?( )。

(1 分)
第 63 题 F5 未作答

汉诺塔递推 h(n)=2h(n1)+1h(n) = 2h(n-1) + 1h(1)=1h(1) = 1h(5)=?h(5) = ?( )。

(1 分)
第 64 题 F6 未作答

汉诺塔 n=2n = 2(A→C 借助 B),移动序列是( )。

(1 分)
第 65 题 F7 未作答

递推 f(n)=2f(n1)f(n) = 2f(n-1)f(1)=1f(1) = 1)的通项公式是( )。

(1 分)
第 66 题 F8 未作答

递推 f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2) 的特征方程 x2=x+1x^2 = x + 1 的解中包含黄金比 ϕ=1+52\phi = \frac{1+\sqrt{5}}{2}。这说明斐波那契数列的增长速度是( )。

(1 分)
第 67 题 F9 未作答

递推 f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2),初始条件 f(1)=1,f(2)=1f(1)=1, f(2)=1 得斐波那契数列;改为 f(1)=1,f(2)=3f(1)=1, f(2)=3 得到的是( )数列。

(1 分)
第 68 题 F10 未作答

递推编程的标准框架是( )。

(1 分)
第 69 题 F11 未作答

斐波那契数列 f(50)1.2×1010f(50) \approx 1.2 \times 10^{10}int(上限约 2.1×1092.1 \times 10^9)能否存下( )。

(1 分)
第 70 题 F12 未作答

递推 f(n)=f(n1)+f(n2)f(n) = f(n-1) + f(n-2) 只需前两项。不开 f[n]f[n] 数组、只保留两个变量的做法叫( )。

(1 分)
第 71 题 F13 未作答

递推与动态规划的关系是( )。

(1 分)
第 72 题 F14 未作答

关于递推,错误的是( )。

(1 分)

栈队列递归综合

14 QUESTIONS · 2 POINTS EACH
第 73 题 G1 未作答

用双栈法求中缀表达式 2 * (3 + 4) 的值,计算结果是( )。

(1 分)
第 74 题 G2 未作答

检查括号串 (()()) 是否匹配:用栈扫描,最终栈的状态是( )。

(1 分)
第 75 题 G3 未作答

main() 调用 f(3)f(3) 调用 f(2)f(2) 调用 f(1)f(1) 返回 11。此时栈中从底到顶为( )。

(1 分)
第 76 题 G4 未作答

表达式 (a+b)*c-d 的后缀表达式为( )。

(1 分)
第 77 题 G5 未作答

01void f(int n) {
02    if (n > 2) { f(n / 2); cout << n; }
03    else cout << n;
04}

f(12) 的输出是( )。

(1 分)
第 78 题 G6 未作答

初始空栈和空队列。执行 push(1) push(2) enqueue(pop()) push(3) enqueue(pop()),此时队列从队头到队尾为( )。

(1 分)
第 79 题 G7 未作答

二叉树根为 11,左子 22、右子 3322 的左子 44。BFS 层序遍历序列是( )。

(1 分)
第 80 题 G8 未作答

01int s(int arr[], int n) {
02    if (n == 0) return 0;
03    return arr[n-1] + s(arr, n-1);
04}

int a[] = {1, 2, 3}; s(a, 3) 返回( )。

(1 分)
第 81 题 G9 未作答

递推 f[0]=0,f[1]=1f[0]=0, f[1]=1f[i]=f[i1]+f[i2]f[i] = f[i-1] + f[i-2]f[6]=?f[6] = ?( )。

(1 分)
第 82 题 G10 未作答

用两个栈 S1(入队栈)和 S2(出队栈)实现队列。dequeue() 时若 S2 为空,应( )。

(1 分)
第 83 题 G11 未作答

用两个队列实现栈的 pop()(弹出最后入队的元素),需要的操作次数是( )。

(1 分)
第 84 题 G12 未作答

01int f(int n) {
02    return f(n + 1);  // 没有终止条件
03}

调用 f(0) 的结果是( )。

(1 分)
第 85 题 G13 未作答

空栈依次进栈 a,b,c,允许交替出栈。下列可能的出栈序列是( )。

(1 分)
第 86 题 G14 未作答

以下对数据结构的表述不恰当的是( )。(2023 年 CSP-S 真题)

(1 分)

综合与易错

14 QUESTIONS · 2 POINTS EACH
第 87 题 H1 未作答

栈、队列、deque 的操作能力从少到多排列是( )。

(1 分)
第 88 题 H2 未作答

对同一输入序列 1,2,3,栈和队列的出序分别是( )。

(1 分)
第 89 题 H3 未作答

n=106n = 10^6 的递归求和 f(n) = f(n-1) + n 应改用循环,主要原因是( )。

(1 分)
第 90 题 H4 未作答

防范递归栈溢出的方法不包括( )。

(1 分)
第 91 题 H5 未作答

容量 66 的循环队列,rear = 4enqueuerear 变为( )。

(1 分)
第 92 题 H6 未作答

递推 f[i]=f[i1]+f[i2]f[i] = f[i-1] + f[i-2]i=?i = ? 开始循环(f[0]f[0]f[1]f[1] 已初始化)( )。

(1 分)
第 93 题 H7 未作答

单调栈的核心性质是( )。

(1 分)
第 94 题 H8 未作答

滑动窗口最大值用单调递减队列而不是单调递增队列,原因是( )。

(1 分)
第 95 题 H9 未作答

递推 f(n)=3f(n1)f(n) = 3 \cdot f(n-1)f(0)=1f(0)=1)的 f(5)=?f(5) = ?( )。

(1 分)
第 96 题 H10 未作答

dequeinsert 在中间位置的时间复杂度是( )。

(1 分)
第 97 题 H11 未作答

单调队列的"过期弹出"(从队头移出超出窗口的下标)保证了( )。

(1 分)
第 98 题 H12 未作答

关于 priority_queue(优先队列),正确的是( )。

(1 分)
第 99 题 H13 未作答

递推 f(n)=f(n1)2f(n) = f(n-1) \cdot 2f(0)=1f(0) = 1),f(10)=?f(10) = ?( )。

(1 分)
第 100 题 H14 未作答

关于栈、队列、递归和递推,错误的是( )。

(1 分)

真 题 演 练

8 QUESTIONS · 真题演练不计分
第 1 题 单选 未作答

今有一空栈 SS,对下列待进栈的数据元素序列 a,b,c,d,e,f 依次进行:进栈、进栈、出栈、进栈、进栈、出栈的操作,则此操作完成后,栈底元素为( )。

(0 分)
CSP-S 2020 · 单选 第4题 | 知识点 栈、栈的应用
第 2 题 单选 未作答

广度优先搜索时,一定需要用到的数据结构是( )。

(0 分)
CSP-S 2020 · 单选 第9题 | 知识点 双端队列、冒泡排序
第 3 题 单选 未作答

表达式 a*(b+c)-d 的后缀表达形式为( )。

(0 分)
CSP-S 2020 · 单选 第12题 | 知识点 栈的应用、栈
第 4 题 单选 未作答

在程序运行过程中,如果递归调用的层数过多,可能会由于( )引发错误。

(0 分)
CSP-S 2021 · 单选 第3题 | 知识点 归并排序、栈、Unicode与汉字编码
第 5 题 单选 未作答

若元素 abcdef 依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次退栈操作,则不可能得到的出栈序列是( )。

(0 分)
CSP-S 2022 · 单选 第3题 | 知识点 栈、栈的应用
第 6 题 单选 未作答

以下对数据结构的表述不恰当的一项是( )。

(0 分)
CSP-S 2023 · 单选 第5题 | 知识点 回溯、双端队列
第 7 题 单选 未作答

在 C++ 中,以下哪个函数调用会造成栈溢出?( )

(0 分)
CSP-S 2024 · 单选 第3题 | 知识点 三目运算、归并排序、栈
第 8 题 单选 未作答

下面哪个数据结构最适合实现先进先出(FIFO)的功能?

(0 分)
CSP-S 2024 · 单选 第5题 | 知识点 双端队列、栈