- ベストアンサー
平成12年春 1種 問10-スタック
お世話になっております。 <問題> A,B,Cの順序で入力されるデータがある。 各データについてスタックへの挿入と取出しを一度ずつ任意のタイミングで可能とする場合、 データの出力順序は何通りあるか。 <回答> A-B-C,A-C-B, B-C-A,C-B-A, B-A-C の5通り。 という問題なのですが、 ”一度ずつ任意のタイミングで可能とする”というのがどういうことを指しているのかが、 回答をみても何度も出し入れしているようで、 どうにも意味が分りません。 トンチンカンな質問なのかもしれないのですが、 どなたかに噛み砕いて補足していただけたら幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
スタックは「先に入れたデータは後で取り出すしかない」メモリです。 ですので、話を簡単にするために(A,B)2つのデータで同じことを しようとすると、 1-(1).Aを入れる -(2).(Bを入れる前に)Aを出す -(3).Bを入れる -(4).Bを出す・・・A-Bの順で出力される 2-(1).Aを入れる -(2).Bを入れる -(3).Bを出す(Aは底に沈んでいるので出せない) -(4).Aを出す・・・B-Aの順で出力される と、なりますよね。要は、先入後出法の在庫管理と同じことですね。 後は、ABCの3つのデータで同じように考えてみてください。
その他の回答 (1)
- yukika-37
- ベストアンサー率39% (26/66)
>回答をみても何度も出し入れしているようで、 そんなことはないですよ。 入れるのも出すのも1回ずつです。 スタックというのは、「後から入れたデータを先に取り出す」というデータ構造です。 例えば、ダンボール(A4サイズ)に平らに本(同じくA4サイズ)を積んでいくとします。 本A→本B→本Cの順に入れたとすると、取り出す場合は本C→本B→本Aの順になりますよね。 あまりうまくない例ですが、こんな感じの動作をするのがスタックです。 問題は、「A,B,Cの順序で入力されるデータがある。」ということなので、先ほどの例を使うと「(ダンボールに)本Aを入れる→本Bを入れる→本Cを入れる」の順で入れなければなりません。 (つまり、それ以外の順序(「本Bを入れる→本Aを入れる→本Cを入れる」など)はNG) また、”一度ずつ任意のタイミングで可能とする”というのは、 ・「本Aを入れた後、本Bを入れる前に本Aを取り出す」 ・「本Bを入れた後、本Cを入れる前に本Bを取り出す」 のもOKということです。 この時もちろん ・「本Bを入れる→本Aを出す」 ・「本Cを入れる→本Aを出す」 ・「本Cを入れる→本Bを出す」 は不可能です。 一番上にある本以外を取り出すことは出来ないからですから。 ちなみに回答は ・A-B-C(Aを入れる→Aを出す→Bを入れる→Bを出す→Cを入れる→Cを出す) ・A-C-B(Aを入れる→Aを出す→Bを入れる→Cを入れる→Cを出す→Bを出す) ・B-C-A(Aを入れる→Bを入れる→Bを出す→Cを入れる→Cを出す→Aを出す) ・C-B-A(Aを入れる→Bを入れる→Cを入れる→Cを出す→Bを出す→Aを出す) ・B-A-C(Aを入れる→Bを入れる→Bを出す→Aを出す→Cを入れる→Cを出す) の5通りとなります。 「○を出す」の部分だけ取り出したのが回答です。 また、「○を入れる」の部分だけ取り出すと全てA→B→Cとなっています。 図で説明すれば分かりやすいのですが、文章のみなので分かりにくくてごめんなさい。
お礼
早急なご回答ありがとうございます。 いえいえ、全然分りやすいです! お忙しい中、これ以上ないくらいに丁寧にご説明いただき本当にありがとうございました。 具体的にご説明いただいたので、もう一度書きながら熟考し、やっとスッキリすることができました。 #1のFEX2053様とyukika-37様、どちらの方にもお世話になりましたので、先着順でのありがとうポイントにさせていただきます。 質問できる方が周りにいないものですから、 またこちらのサイトに質問させていただくことがあろうかと思います。 その時はまたお力をお貸しください。 ありがとうございました。
お礼
早急なご回答ありがとうございます。 各データ(A/B/C)について、入一回・出一回 っていうことなんですね。 ”各データ”っていうところを読み飛ばして理解してなかったようです。 すみません、 他にどういう風に解釈できるんだよって設問でした。 具体的に書いていただいたら、ようやく理解できました。 大変助かりました。すっきりです。