#P1408. 【Day4】课后A1-A2 栈与队列真题化训练(18题)

【Day4】课后A1-A2 栈与队列真题化训练(18题)

第 1 题

元素按 1,2,3,4,5,6 顺序入栈。下列哪个序列不可能成为出栈顺序?

{{ select(1) }}

  • 2,1,4,3,6,5
  • 3,2,5,4,6,1
  • 4,3,2,1,6,5
  • 4,2,3,1,6,5

第 2 题

入栈顺序为 1,2,3,4,5,6,出栈顺序为 2,4,3,6,5,1。模拟过程中栈内元素个数的最大值是多少?

{{ input(2) }}


第 3 题

A,B,C,D,E 依次入栈并在任意时刻出栈。为了得到出栈序列 C,B,E,D,A,第一个元素出栈前共进行了几次入栈?

{{ input(3) }}


第 4 题

固定入栈顺序为 1,2,3,4。若第一个出栈元素是 3,则第二个出栈元素不可能是( )。

{{ select(4) }}

  • 1
  • 2
  • 4
  • 以上都有可能

第 5 题

括号串 {[()]}[({})] 在扫描过程中,栈内元素个数的最大值是多少?

{{ input(5) }}


第 6 题

从左到右扫描 (([]){})()),位置从 1 开始编号。第一次能够确定不合法的是第几个字符?

{{ input(6) }}


第 7 题

后缀表达式 7 2 3 * + 8 4 / - 的值是多少?

{{ input(7) }}


第 8 题

计算后缀表达式 5 1 2 + 4 * + 3 - 时,栈内元素个数的最大值是多少?

{{ input(8) }}


第 9 题

写出程序的输出结果:

int g(int n) {
    if (n <= 1) return 1;
    return g(n - 2) + 1;
}
cout << g(7);

{{ input(9) }}


第 10 题

写出程序的输出结果:

stack<int> a;
queue<int> b;
for (int x = 1; x <= 7; x++) {
    if (x % 3 != 0) a.push(x);
    else if (!a.empty()) {
        b.push(a.top());
        a.pop();
    }
}
while (!b.empty()) {
    cout << b.front();
    b.pop();
}

{{ input(10) }}


第 11 题

队列初始为 1,2,3,4,5。重复三次:取出队首 xx;若 xx 为奇数,把 x+5x+5 加入队尾;若为偶数则不再入队。最终队列从队首到队尾是什么?(数字间用一个空格)

{{ input(11) }}


第 12 题

有任务 A,B,C,D 依次进入队列。每处理一个任务后,若它不是 D,就在队尾加入它的后继任务(A 的后继为 B,B 的后继为 C,C 的后继为 D)。处理 6 次后,队首任务是哪个字母?

{{ input(12) }}


第 13 题

长度为 12 的循环队列中,head=9, tail=4head 指队首、tail 指下一个插入位置。队列中有几个元素?

{{ input(13) }}


第 14 题

长度为 8 且牺牲一个位置的循环队列,最多能保存多少个元素?

{{ select(14) }}

  • 6
  • 7
  • 8
  • 9

第 15 题

长度为 7 的循环队列初始 head=tail=0。依次执行:入队 3 个、出队 2 个、入队 4 个。最终 head 的值是多少?

{{ input(15) }}


第 16 题

从顶点 1 开始进行 BFS。邻接点按编号从小到大入队:1 相邻 2、3;2 相邻 1、4、5;3 相邻 1、5;4 相邻 2;5 相邻 2、3。访问顺序是什么?(数字间用一个空格)

{{ input(16) }}


第 17 题

若每个元素最多入栈一次、出栈一次,则对 nn 个元素完成整个模拟的时间复杂度是( )。

{{ select(17) }}

  • O(1)O(1)
  • O(logn)O(\log n)
  • O(n)O(n)
  • O(n2)O(n^2)

第 18 题

有一个空栈。依次读入 4,1,7,2,9,3:若当前数大于栈顶则入栈,否则弹出栈顶且当前数不再处理;空栈时直接入栈。全部处理后,从栈底到栈顶依次是什么?(数字间用一个空格)

{{ input(18) }}