平成28年度 秋期 午前 問3
基礎理論
スタックに関する問題
逆ポーランド表記法で表された式を評価する場合,途中の結果を格納するためのスタックを用意し,式の項や演算子を左から右に順に入力し処理する。スタックが図の状態のとき,入力が演算子となった。このときに行われる演算はどれか。ここで,演算は中置表記法で記述するものとする。
〔図:スタックの状態〕
| スタックの位置 | 格納されている項 |
|---|---|
| 先頭(いちばん後に入れた) | D |
| 2 番目 | C |
| 3 番目 | B |
| 底(いちばん先に入れた) | A |
- アA 演算子 B
- イB 演算子 A
- ウC 演算子 D
- エD 演算子 C
答えと解説を見る
✓ これが正解ウC 演算子 D
解説
後から積んだDが右、先に積んだCが左になります。
逆ポーランド表記法を評価するとき、演算子が入力されたらすることは決まっています。スタックから項を二つ取り出し、その二つを演算し、結果をスタックへ戻す、という手順です。ここで効いてくるのがスタックの性質で、後から入れたものが先に出てきます。図の状態は底から A・B・C の順に積み上げ、最後に D を入れた姿なので、取り出されるのは D が先、その次が C です。問題は、取り出した二つを中置表記法でどちら側に書くかです。逆ポーランドで C D と並べてから演算子を書いた式は、中置に直すと C を左、D を右に置いた形になります。つまり先に積まれた C が左、後から積まれた D が右です。よって行われる演算は C を左、D を右に置いた形になります。取り出す順番と書く順番がちょうど逆になる点が、この問のいちばんの取り違えどころです。加算のように左右を入れ替えても答えが同じ演算なら違いは現れませんが、減算や除算では結果が変わるので、左右の決め方そのものが問われています。
ほかの選択肢はなぜ違うのか
- アA 演算子 B:底のほうに積まれている項を取り出すと読んだ形です。後入れ先出しの構造では底側の項に直接触れることができず、上に載っている二つを先にどかさない限り取り出せません。
- イB 演算子 A:底側の項を使ううえに、並べる左右も入れ替わっています。取り出せる位置の誤りと書く順の誤りが重なっているので、どちらか一方を直しても正しい式にはなりません。
- エD 演算子 C:取り出した順番のまま左から並べた形です。減算なら 2 つの値の引く向きが入れ替わり、除算なら割る側と割られる側が逆になるため、同じ入力でも結果が変わってしまいます。
出典:平成28年度 秋期 応用情報技術者試験 午前 問3
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)