- ベストアンサー
スタックについて
A、B、C、Dの順に到着するデータに対して、一つのスタックだけを用いて出力可能なデータ列はどれか。 ア A、D、B、C イ B、D、A、C ウ C、B、D、A エ D、C、A、B 解答は C B D A (pop) C B → B → → D → → A A A A A となり、ウとなります。 しかし、A、B、C、Dの順に到着するデータということから D C B A とデータが積み上げられることになると思われます。 そうなると、解答もDCBAとなると思われます。 スタックはデータを2つしか積み上げられない ものと考えるのなら問題はないのですが、 疑問が残ります。 長文となりましたが、宜しくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#1>全てのデータが到着してから、出力が行なわれないのでしょうか? 問題文では、到着する順について示されていて、出力されるタイミングについては書かれていませんから、全てのデータが到着してからというような条件はありません。(スタックを利用するタイミングに全てのデータが入ってからなどという制限があろうはずもありません) #2>スタックにはデータを入れられる限界があるのでしょうか。 スタックが利用できるサイズについても問題文では示されていないので、無限に使えるもしくは、問題で示されるデータを保持するに充分なサイズがあるとして良いでしょう。 一般的には、 メモリのサイズに制限を受けるし、プログラムと同一のセグメントを使っている場合、プログラムを破壊しない部分までが使えます。
その他の回答 (3)
質問者さんのおっしゃるとおり、D,C,B,Aの順にスタックから出てくる場合もあります。 しかし、回答3でも述べられているように、スタックに入ったデータは、好きなときに取り出すことができます。 なので、この問題では、A,B,Cが入った時点でC,Bを取り出し、Dをスタックに入れ、D,Aと取り出しています。 一つのスタックだけを用いて出力可能なデータ列はどれか。 ~~~~~~~~ とあるので、1つのスタックを用いれば、D,C,B,AやC,B,D,Aの順にデータを取り出すことができます。 選択肢のア、イ、エは、1つのスタックを使ってもデータを選択肢のような順番で取り出すことはできません。 なお、1つのスタックを使うと、回答2で答えられている14通りの方法があります。 このうち、D,C,B,Aの順に取り出す事もできるのですが、それだと、問題が間単になってしまうので、あえてC,B,D,Aを選択肢に入れたのだと思います。
お礼
Dの解答を「DCBA」と勘違いしていました・・・・・ 大変ご迷惑をおかけして申し訳ございません。
- osamuy
- ベストアンサー率42% (1231/2878)
単に、ア・イ・エは、スタックひとつだけだと不可能だから、正解でないというだけでは。 試してみると14通りあるみたいです。 1 A B C D 2 A B D C 3 A C B D 4 A C D B 5 A D C B 6 B A C D 7 B A D C 8 B C A D 9 B C D A 10 B D C A 11 C B A D 12 C B D A 13 C D B A 14 D C B A
お礼
全てのデータを入力しないと、出力は行なわれないのでしょうか? 問題ではABCが到着した時点で、データを取り出しています。 ABCDのデータが到着してから、データを取り出すとすれば DCBAになると思われます。 スタックにはデータを入れられる限界があるのでしょうか。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ABC まで到着した時にCBを出力し Dが到着してDAを出力すると CBDAになります。 ア、イ、エの回答については、 一番最初に到着したAが 他のデータより先に出力されると言うことが1つのスタックでは考えられないので該当しません。
補足
ABCDが到着したら、その後にDを出力するなど、 全てのデータが到着してから、出力が行なわれない のでしょうか??
お礼
やっと理解することができました!! 問題文をよく見たら、直ぐ解決することができました。