Oren Aによって投稿されたライフル クリップの例えはかなり良いですが、別の例を試して、教官が伝えようとしていたことを予測しようとします.
スタックは、その名前が示すように、次のような「もの」の配置です。
- トップ
- 底
- 上と下の間の順序 (上から 2 番目、下から 3 番目など)。
(文字通り、机の上に積み上げられた本と考えてください。上からしか取ることができません)
スタックに何かをプッシュするということは、「それを一番上に置く」ことを意味します。スタックから何かをポップするということは、スタックから「一番上の「もの」を取り出す」ことを意味します。
簡単な使い方は、単語の順序を逆にすることです。「ポップコーン」という単語を逆にしたいとします。各文字を左から右 (7 文字すべて) にプッシュしてから、7 文字をポップすると逆順になります。こういう表情でやっていたようです。
プッシュ(p) プッシュ(o) プッシュ(p) プッシュ(c) プッシュ(o) プッシュ(r) プッシュ(n)
単語全体をプッシュした後、スタックは次のようになります。
| n | <- top
| r |
| o |
| c |
| p |
| o |
| p | <- bottom (first "thing" pushed on an empty stack)
======
pop() を 7 回実行すると、次の順序で文字が表示されます。
n,r,o,c,p,o,p
infix/postfix/prefix の変換は、スタックを教える際のコンピューター サイエンスの病理学的例です。
中置から後置への変換。
中置式への事後修正変換は非常に簡単です。
(式を左から右にスキャン)
- すべての数値 (オペランド) について、それをスタックにプッシュします。
- 演算子 (+、-、/、*) に遭遇するたびに、スタックから 2 回ポップし、それらの間に演算子を配置します。それをスタックにプッシュします。
したがって、53+2* がある場合、次の手順でそれを infix に変換できます。
- 5を押します。
- 3を押します。
- + に遭遇: ポップ 3、ポップ 5、スタックで 5+3 をプッシュ (5 と 3 の順序と一致するようにする)
- 2を押します。
- 遭遇 *: ポップ 2、ポップ (5+3)、プッシュ (2 * (5+3))。
*式の最後に到達したとき、それが正しく形成されていれば、スタックには 1 つのアイテムのみが含まれているはずです。
'x' と 'o' を導入することで、彼はそれらを中置式の左オペランドと右オペランドの一時的なホルダーとして使用していた可能性があります: x + o、x - o など (または x,o の順序が逆)。
ウィキペディアにも素敵な書き込みがあります。式の順序を間違えた場合に備えて、回答をwikiとして残しました。