跳到正文

平成22年度 春期 ITパスポート試験 問85

这道题的解析和你的作答记录。

問85
頻出度★☆☆

下から上へデータを積み上げ,上にあるデータから順に取り出すデータ構造(以下,スタックという)がある。これを用いて,図に示すような,右側から入力されたデータの順番を変化させて,左側に出力する装置を考える。この装置に対する操作は次の3通りである。 ① 右側から入力されたデータをそのまま左側に出力する。 ② 右側から入力されたデータをスタックに積み上げる。 ③ スタックの1番上にあるデータを取り出して左側に出力する。 この装置の右側から順番に X,Y,Z を入力した場合に,この①~③の操作を組み合わせても,左側に出力できない順番はどれか。

出典 平成22年度 春期 ITパスポート試験 問85
解説

問 85

  • 错误ア

    「X, Z, Y」是可以实现的,所以它不是无法输出的顺序。用①把 X 直接输出 → 用②把 Y 压入栈中 → 用①把 Z 直接输出 → 用③把栈里的 Y 取出并输出,这样就得到 X, Z, Y。

  • 错误イ

    「Y, Z, X」是可以实现的,所以它不是无法输出的顺序。用②把 X 压入栈中 → 用①把 Y 直接输出 → 用①把 Z 直接输出 → 用③把 X 取出并输出,这样就得到 Y, Z, X。

  • ウ

    正解 正确答案是 ウ「Z, X, Y」。要让 Z 最先从左侧输出,就只能先把已经输入的 X 和 Y 都用②压入栈中。输入顺序是 X→Y→Z,所以栈里从下往上依次是 X、Y。此时 Z 一被输入就可以用①直接从左侧输出。但剩下的 X 和 Y 只能用③从栈的最上面取出,所以位于上面的 Y 先出、位于下面的 X 后出。也就是说,Z 之后能输出的一定是 Y,做不出「Z 的下一个是 X」这样的顺序。因此,无论怎样组合①~③都无法输出的顺序是 ウ。

  • 错误エ

    「Z, Y, X」是可以实现的,所以它不是无法输出的顺序。用②压入 X → 用②压入 Y(从下往上为 X、Y)→ 用①把 Z 直接输出 → 用③输出 Y → 用③输出 X,这样就得到 Z, Y, X。把输入顺序原样颠倒过来,正是栈最擅长的动作。

ここがポイント
  • 栈是 LIFO(后进先出)的数据结构,只有压入(push)和从最上面取出(pop)这两种操作。一起压进去的数据,必然只能按压入顺序的逆序取出——这个性质就是判断的决定性依据。
  • 这个装置是「①直通」和「②③经由栈」两条路径的组合问题。对每个选项实际逐步追踪操作序列,并在过程中写出栈的内容(从下到上的排列)来验证,是最稳妥的解法。
用語
解答問85ウ
练这一题

作答记录