林老师 · 客观题题库 · CSP-J 卷
CSP-J 卷
年年必考 · 栈/栈的应用 · 共 33 题 · 由简到难 · 建议 50 分钟
真题 复刻
试卷编号OBJ-698728
题目总数33 题 · 66 分
试卷类型客观题
考生须知:
① 本卷为客观题单卷,合计 33 题 · 66 分 ,全部为客观题;
② 试卷右上角设有 「提交答卷」 与 「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。
壹
客 观 题
33 QUESTIONS · 2 POINTS EACH
第 1 题
单选
☆
⧉
未作答
下图中所使用的数据结构是( )。图示依次执行“压入 A、压入 B、弹出 B、压入 C”。
(2 分)
CSP-J 2020 · 单选 第11题 | 知识点 栈、栈的应用
第 2 题
单选
☆
⧉
未作答
对于入栈顺序为 a, b, c, d, e 的序列,下列( )不是合法的出栈序列。
(2 分)
A a, b, c, d, e
B e, d, c, b, a
C b, a, c, d, e
D c, d, a, e, b
CSP-J 2021 · 单选 第5题 | 知识点 栈、栈的应用
第 3 题
单选
☆
⧉
未作答
表达式 a*(b+c)*d 的后缀表达式为( ),其中 * 和 + 是运算符。
(2 分)
A **a+bcd
B abc+*d*
C abc+d**
D *a*+bcd
CSP-J 2021 · 单选 第9题 | 知识点 栈的应用、栈
第 4 题
单选
☆
⧉
未作答
有 6 6 6 个元素,按照 6 6 6 、5 5 5 、4 4 4 、3 3 3 、2 2 2 、1 1 1 的顺序进入栈 S,请问下列哪个出栈序列是非法的( )。
(2 分)
A 5 4 3 6 1 2
B 4 5 3 1 2 6
C 3 4 6 5 2 1
D 2 3 4 1 5 6
CSP-J 2022 · 单选 第2题 | 知识点 栈、栈的应用
第 5 题
单选
☆
⧉
未作答
对表达式 a+(b-c)*d 的前缀表达式为( ),其中 +、-、* 是运算符。
(2 分)
A *+a-bcd
B +a*-bcd
C abc-d*+
D abc-+d
CSP-J 2022 · 单选 第6题 | 知识点 栈的应用、栈
第 6 题
单选
☆
⧉
未作答
(2 分)
A 图的深度优先遍历算法常使用的数据结构为栈。
B 栈的访问原则为后进先出,队列的访问原则是先进先出。
C 队列常常被用于广度优先搜索算法。
D 栈与队列存在本质不同,无法用栈实现队列。
CSP-J 2022 · 单选 第10题 | 知识点 栈、队列、图的DFS遍历
第 7 题
单选
☆
⧉
未作答
后缀表达式 6 2 3 + - 3 8 2 / + * 2 ^ 3 + 对应的中缀表达式是( )。
(2 分)
A ( ( 6 − ( 2 + 3 ) ) ∗ ( 3 + 8 / 2 ) ) 2 + 3 ((6 - (2 + 3)) * (3 + 8 / 2)) ^ 2 + 3 (( 6 − ( 2 + 3 )) ∗ ( 3 + 8/2 ) ) 2 + 3
B 6 − 2 + 3 ∗ 3 + 8 / 2 2 + 3 6 - 2 + 3 * 3 + 8 / 2 ^ 2 + 3 6 − 2 + 3 ∗ 3 + 8/ 2 2 + 3
C ( 6 − ( 2 + 3 ) ) ∗ ( ( 3 + 8 / 2 ) 2 ) + 3 (6 - (2 + 3)) * ((3 + 8 / 2) ^ 2) + 3 ( 6 − ( 2 + 3 )) ∗ (( 3 + 8/2 ) 2 ) + 3
D 6 − ( ( 2 + 3 ) ∗ ( 3 + 8 / 2 ) ) 2 + 3 6 - ((2 + 3) * (3 + 8 / 2)) ^ 2 + 3 6 − (( 2 + 3 ) ∗ ( 3 + 8/2 ) ) 2 + 3
CSP-J 2023 · 单选 第8题 | 知识点 栈的应用、栈
第 8 题
单选
☆
⧉
未作答
给定一个空栈,支持入栈和出栈操作。若入栈操作的元素依次是 1 2 3 4 5 6,其中 1 最先入栈、6 最后入栈,下面哪种出栈顺序是不可能的?( )
(2 分)
A 6 5 4 3 2 1
B 1 6 5 4 3 2
C 2 4 6 5 3 1
D 1 3 5 2 4 6
CSP-J 2024 · 单选 第13题 | 知识点 栈、栈的应用
第 9 题
单选
☆
⧉
未作答
对假设栈 S 和队列 Q 的初始状态为空。存在 e1~e6 六个互不相同的数据,每个数据按照进栈 S、出栈 S、进队列 Q、出队列 Q 的顺序操作,不同数据间的操作可能会交错。已知栈 S 中依次有数据 e1、e2、e3、e4、e5 和 e6 进栈,队列 Q 依次有数据 e2、e4、e3、e6、e5 和 e1 出队列。则栈 S 的容量至少是( )个数据。
(2 分)
CSP-J 2022 · 单选 第5题 | 知识点 栈、队列、模拟
第 10 题
单选
☆
⧉
未作答
给定一个初始为空的整数栈 S S S 和一个空的队列 P P P 。我们按顺序处理输入的整数队列 A : 7 , 5 , 8 , 3 , 1 , 4 , 2 A: 7, 5, 8, 3, 1, 4, 2 A : 7 , 5 , 8 , 3 , 1 , 4 , 2 。对于队列 A A A 中的每一个数,执行以下规则:如果该数是奇数,则将其压入栈 S S S ;如果该数是偶数,且栈 S S S 非空,则弹出一个栈顶元素,并加入到队列 P P P 的末尾;如果该数是偶数,且栈 S S S 为空,则不进行任何操作。当队列 A A A 中的所有数都处理完毕后,队列 P P P 的内容是什么?( )
(2 分)
A 5, 1, 3
B 7, 5, 3
C 3, 1, 5
D 5, 1, 3, 7
CSP-J 2025 · 单选 第15题 | 知识点 栈、双端队列、泛洪算法
第 11 题
单选
☆
⧉
未作答
在程序运行过程中,如果递归调用的层数过多,会因为( )引发错误。
(2 分)
A 系统分配的栈空间溢出
B 系统分配的堆空间溢出
C 系统分配的队列空间溢出
D 系统分配的链表空间溢出
GESP 五级 2025-03 · 单选 第7题 | 知识点 递归、栈
第 12 题
单选
☆
⧉
未作答
有关下面 C++ 代码的说法,正确的是( )。
01 #include <iostream>
02 using namespace std;
03
04 class ManyData {
05 int * __data;
06 int head, tail, capacity;
07 public :
08 ManyData(int cap) {
09 capacity = cap;
10 __data = new int [capacity];
11 head = tail = 0;
12 }
13 void push(int val) {
14 __data[tail++] = val;
15 }
16 int pop() {
17 return __data[--tail];
18 }
19 int size() {
20 return tail - head;
21 }
22 };
23 int main() {
24 auto myData = ManyData(100);
25 myData.push(1);
26 myData.push(2);
27 myData.push(3);
28 myData.push(100);
29 cout << myData.size() << endl;
30 cout << myData.pop() << endl;
31 return 0;
32 }
(2 分)
A 这段代码不能正常运行。
B ManyData 类可用于构造队列(Queue)数据结构。
C 在上面代码环境,代码 cout<< myData.__data[0] << endl; 可以增加到代码 main 函数末尾(return 0; 之前),且不会导致报错。
D 可以为 ManyData 类的 push() 、 pop() 函数增加异常处理代码,否则在使用 ManyData 类时可能导致运行时错误或逻辑错误(不一定局限于上述代码中的 main 函数)。
GESP 六级 2023-09 · 单选 第7题 | 知识点 类与对象、栈、异常处理
第 13 题
单选
☆
⧉
未作答
给定一个空栈,执行以下操作序列:
操作序列:push(1), push(2), push(3), pop(), pop(), push(4), push(5), pop()
最终栈中的元素是( )。
(2 分)
A 1, 2
B 1, 4, 5
C 1, 2, 5
D 1, 4
GESP 六级 2024-03 · 单选 第9题 | 知识点 栈、栈的应用
第 14 题
判断
☆
⧉
未作答
栈的基本操作包括入栈(push)和出栈(pop)。
(2 分)
GESP 六级 2024-03 · 判断 第9题 | 知识点 栈、栈的应用
第 15 题
单选
☆
⧉
未作答
向一个栈顶为 hs 的链式栈中插入一个指针为 s 的结点时,应执行( )。
(2 分)
A hs->next = s;
B s->next = hs; hs = s;
C s->next = hs->next; hs->next = s;
D s->next = hs; hs = hs->next;
GESP 六级 2024-06 · 单选 第4题 | 知识点 栈、单向链表、程序补全
第 16 题
单选
☆
⧉
未作答
在栈数据结构中,元素的添加和删除是按照什么原则进行的?
(2 分)
GESP 六级 2024-06 · 单选 第5题 | 知识点 栈、队列
第 17 题
单选
☆
⧉
未作答
采用如下代码实现检查输入的字符串括号是否匹配,横线上应填入的代码为( )。
01 #include <iostream>
02 #include <stack>
03 #include <string>
04
05 using namespace std;
06
07 bool is_valid(string s) {
08 stack<char > st;
09 char top;
10
11 for (char & ch : s) {
12 if (ch == '(' || ch == '{' || ch == '[' ) {
13 st.push(ch); // 左括号入栈
14 }
15 else
16 {
17 if (st.empty())
18 return false ;
19 ____________ // 在此处填入代码
20 if ((ch == ')' && top != '(' ) ||
21 (ch == '}' && top != '{' ) ||
22 (ch == ']' && top != '[' )) {
23 return false ;
24 }
25 }
26 }
27
28 return st.empty(); // 栈为空则说明所有括号匹配成功
29 }
(2 分)
A
top = st.top(); st.pop();
B
st.pop(); top = st.top();
C
st.pop(); top = st.front();
D
top = st.front(); st.pop();
GESP 六级 2024-09 · 单选 第4题 | 知识点 栈的应用、栈、程序补全
第 18 题
判断
☆
⧉
未作答
栈是一种线性结构,可通过数组或链表来实现。二者相比,数组实现占用的内存较少,链表实现的入队和出队操作的时间复杂度较低。
(2 分)
GESP 六级 2024-09 · 判断 第3题 | 知识点 栈、一维数组、单向链表
第 19 题
单选
☆
⧉
未作答
阅读以下代码,下面哪一项是正确的?
01 void processData() {
02 stack<int > s;
03 queue<int > q;
04 for (int i = 1; i <= 5; ++i) {
05 s.push(i);
06 q.push(i);
07 }
08 while (!s.empty()) {
09 cout << "Stack pop: " << s.top() << endl;
10 s.pop();
11 }
12 while (!q.empty()) {
13 cout << "Queue pop: " << q.front() << endl;
14 q.pop();
15 }
16 }
(2 分)
A 栈 s 输出顺序 1 2 3 4 5,队列 q 输出顺序 5 4 3 2 1。
B 栈 s 输出顺序 5 4 3 2 1,队列 q 输出顺序 1 2 3 4 5。
C 栈 s 输出顺序 1 2 3 4 5,队列 q 输出顺序 1 2 3 4 5。
D 栈 s 输出顺序 1 2 3 4 5,队列 q 输出顺序 1 2 3 4 5,程序不会正常执行。
GESP 六级 2024-12 · 单选 第4题 | 知识点 栈、队列、程序阅读与输出推断
第 20 题
判断
☆
⧉
未作答
栈中元素的插入和删除操作都在栈的顶端进行,所以方便用单向链表实现。
(2 分)
GESP 六级 2024-12 · 判断 第3题 | 知识点 栈、单向链表
第 21 题
判断
☆
⧉
未作答
栈中元素的插入和删除操作都在栈的顶端进行,所以方便用双向链表比单向链表更合适实现。
(2 分)
GESP 六级 2024-12 · 判断 第10题 | 知识点 栈、单向链表、双向链表
第 22 题
单选
☆
⧉
未作答
以下代码判断括号是否匹配,请在横线处填入代码。
01 bool isBalanced(string s) {
02 stack<char > st;
03 for (char c : s) {
04 if (c == '(' || c == '[' || c == '{' ) {
05 st.push(c);
06 } else {
07 if (st.empty()) return false ; // 无括号匹配
08 char top = st.top();
09 st.pop();
10 if ((c == ')' && top != '(' ) ||
11 (c == ']' && top != '[' ) ||
12 (c == '}' && top != '{' )) {
13 return false ;
14 }
15 }
16 }
17 return ____________; // 在此处填入代码
18 }
(2 分)
A true
B false
C st.empty()
D !st.empty()
GESP 六级 2025-03 · 单选 第14题 | 知识点 栈的应用、栈、程序补全
第 23 题
单选
☆
⧉
未作答
以下关于栈和队列的代码,执行后输出是()。
01 stack<int > s;
02 queue<int > q;
03
04 for (int i = 1; i <= 3; ++i) {
05 s.push(i);
06 q.push(i);
07 }
08 cout << s.top() << " " << q.front() << endl;
(2 分)
GESP 六级 2025-06 · 单选 第4题 | 知识点 栈、队列、程序阅读与输出推断
第 24 题
单选
☆
⧉
未作答
(2 分)
GESP 六级 2025-09 · 单选 第4题 | 知识点 栈、栈的应用
第 25 题
判断
☆
⧉
未作答
在 C++ STL 中,栈(std::stack)的 pop 操作返回栈顶元素并移除它。
(2 分)
GESP 六级 2025-09 · 判断 第4题 | 知识点 栈、STL容器
第 26 题
单选
☆
⧉
未作答
某文本编辑器把用户输入的字符依次压入栈 S。用户依次输入 A、B、C、D 后,用户按了两次撤销(每次撤销,弹出栈顶一个字符)。此时栈从栈底到栈顶的内容是()。
(2 分)
GESP 六级 2025-12 · 单选 第4题 | 知识点 栈、栈的应用
第 27 题
判断
☆
⧉
未作答
(2 分)
GESP 六级 2025-12 · 判断 第5题 | 知识点 栈的应用、栈
第 28 题
单选
☆
⧉
未作答
在以下计算机系统应用场景中,最适合使用循环队列的是()。
(2 分)
A 函数调用过程中,保存局部变量和返回地址
B 表达式求值中的运算符优先级处理
C 操作系统中的进程优先级调度(高优先级先执行)
D 生产者和消费者问题中的共享缓冲区
GESP 六级 2026-03 · 单选 第5题 | 知识点 循环队列、队列、栈的应用
第 29 题
单选
☆
⧉
未作答
某文本编辑器把用户输入的字符依次压入栈 S 。用户依次输入 X, Y, Z, W 后,连续执行两次撤销操作。每次撤销都会弹出栈顶一个字符。此时栈从栈底到栈顶的内容是( )。
(2 分)
GESP 六级 2026-06 · 单选 第4题 | 知识点 栈、栈的应用
第 30 题
判断
☆
⧉
未作答
在 C++ STL 中, stack 的 pop() 函数会返回栈顶元素并将其删除。
(2 分)
GESP 六级 2026-06 · 判断 第3题 | 知识点 栈、STL容器
第 31 题
判断
☆
⧉
未作答
递归调用在运行时会由于层数过多导致程序崩溃,可以通过循环配合栈缓解这一问题。
(2 分)
GESP 七级 2024-12 · 判断 第9题 | 知识点 递归、栈
第 32 题
判断
☆
⧉
未作答
n n n 个不同元素依次入栈的出栈序列数与将 n n n 个不同元素划分成若干非空子集的方案数相等。
(2 分)
GESP 八级 2025-12 · 判断 第7题 | 知识点 栈、卡特兰数
第 33 题
单选
☆
⧉
未作答
将4 4 4 个元素按 1,2,3,4的顺序入栈,在该过程中可随时插入出栈操作。下列序列中不可能作为出栈序列的是( )。
(2 分)
A 1,2,3,4
B 2,1,4,3
C 3,2,1,4
D 3,1,2,4
GESP 八级 2026-06 · 单选 第15题 | 知识点 栈、栈的应用