#CSPJDSR02. CSP-J 数据结构|R02 栈 stack 与程序阅读

CSP-J 数据结构|R02 栈 stack 与程序阅读

CSP-J 数据结构|R02 栈 stack 与程序阅读

训练重点: LIFO、push/pop/top/empty/size、数组模拟栈、出栈序列与典型应用

每题只有一个正确选项。建议按 CSP 初赛方式独立完成,程序阅读题必须在草稿纸上逐步模拟。

第 1 题

栈 stack 的基本特点是( )。

{{ select(1) }}

  • 先进先出
  • 后进先出
  • 按关键字排序
  • 随机访问

第 2 题

关于 std::stack,下列说法正确的是( )。

{{ select(2) }}

  • pop() 返回并删除栈顶元素
  • top() 删除栈顶元素
  • pop() 只删除栈顶,不返回值
  • size() 返回栈顶元素

第 3 题

执行下面代码后输出的是( )。

stack<int> s;
s.push(4);
s.push(7);
s.push(9);
s.pop();
s.push(2);
cout << s.top() << " " << s.size();

{{ select(3) }}

  • 2 3
  • 7 2
  • 2 2
  • 9 3

第 4 题

若 s.empty() 返回 true,则此时下面哪项操作可以安全执行?

{{ select(4) }}

  • s.top()
  • s.pop()
  • 再次调用 s.empty()
  • 先 s.top() 再 s.pop()

第 5 题

用数组模拟栈,约定 top=0 表示空栈,入栈使用 a[++top]=x。连续压入 10、20、30 后,再执行一次 top--,此时 a[top] 是( )。

{{ select(5) }}

  • 10
  • 20
  • 30
  • 0

第 6 题

入栈顺序固定为 1、2、3、4。下列出栈序列中,不可能出现的是( )。

{{ select(6) }}

  • 2 1 4 3
  • 1 2 4 3
  • 3 4 2 1
  • 3 1 4 2

第 7 题

执行下面代码后,栈顶元素是( )。

stack<int> s;
for(int i=1;i<=6;i++){
    s.push(i);
    if(i%3==0) s.pop();
}

{{ select(7) }}

  • 4
  • 5
  • 6
  • 2

第 8 题

下列任务中,最典型地利用栈结构的是( )。

{{ select(8) }}

  • 排队办理业务
  • 括号匹配
  • 按 key 自动升序存储
  • 按下标访问第 100 个元素

第 9 题

程序中递归调用过程可以看作主要使用了哪种数据结构来保存函数调用现场?

{{ select(9) }}

  • 栈
  • 队列
  • set
  • map

第 10 题

执行下面代码,最终输出是( )。

stack<int> s;
for(int i=1;i<=5;i++) s.push(i);
while(s.size()>2) s.pop();
cout << s.top();

{{ select(10) }}

  • 1
  • 2
  • 3
  • 5

作答要求

  • 栈题:画清 栈底 / 栈顶。
  • 队列题:标清 队首 / 队尾。
  • 循环队列:每次移动都写出取模后的下标。
  • 链表题:逐句修改 next 箭头,不要只靠心算。
  • STL 题:特别注意函数是否会改变容器内容。