• ベストアンサー

平成12年春 1種 問10-スタック

お世話になっております。 <問題> A,B,Cの順序で入力されるデータがある。 各データについてスタックへの挿入と取出しを一度ずつ任意のタイミングで可能とする場合、 データの出力順序は何通りあるか。 <回答> A-B-C,A-C-B, B-C-A,C-B-A, B-A-C の5通り。 という問題なのですが、 ”一度ずつ任意のタイミングで可能とする”というのがどういうことを指しているのかが、 回答をみても何度も出し入れしているようで、 どうにも意味が分りません。 トンチンカンな質問なのかもしれないのですが、 どなたかに噛み砕いて補足していただけたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7989/21362)
回答No.1

スタックは「先に入れたデータは後で取り出すしかない」メモリです。 ですので、話を簡単にするために(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つのデータで同じように考えてみてください。

noname#44485
質問者

お礼

早急なご回答ありがとうございます。 各データ(A/B/C)について、入一回・出一回 っていうことなんですね。 ”各データ”っていうところを読み飛ばして理解してなかったようです。 すみません、 他にどういう風に解釈できるんだよって設問でした。 具体的に書いていただいたら、ようやく理解できました。 大変助かりました。すっきりです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yukika-37
  • ベストアンサー率39% (26/66)
回答No.2

>回答をみても何度も出し入れしているようで、 そんなことはないですよ。 入れるのも出すのも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となっています。 図で説明すれば分かりやすいのですが、文章のみなので分かりにくくてごめんなさい。

noname#44485
質問者

お礼

早急なご回答ありがとうございます。 いえいえ、全然分りやすいです! お忙しい中、これ以上ないくらいに丁寧にご説明いただき本当にありがとうございました。 具体的にご説明いただいたので、もう一度書きながら熟考し、やっとスッキリすることができました。 #1のFEX2053様とyukika-37様、どちらの方にもお世話になりましたので、先着順でのありがとうポイントにさせていただきます。 質問できる方が周りにいないものですから、 またこちらのサイトに質問させていただくことがあろうかと思います。 その時はまたお力をお貸しください。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 平成16年度の春の問題なんですが

    平成16年度の春の問題なんですが A,B,C,Dの順に到着するデータに対して1つのスタックだけを用いて出力可能なデータ列はどれか 回答を見てもどういうことかさっぱりわかりません。 スタックは最後に格納したものから先にとりだせるので DCBAの順で取り出せると思ったんですが・・CBDAの順のようです。 教えて下さい

  • スタックについて

    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つしか積み上げられない ものと考えるのなら問題はないのですが、 疑問が残ります。 長文となりましたが、宜しくお願いいたします。

  • スタックを用いたプログラム

    http://okwave.jp/qa4433705.html 先日教えて戴いた事でスタックがどういったものなのかは わかりましたが、実際にプログラムを作ってみると、 なかなかうまくいけません。再びアドバイスを戴ければと思ってます。 <プログラムの仕様> 入力数値をスタックに格納し'a'が入力されたら、 スタックに格納されている数値を全て取り出し、 平均値を出力するプログラム ・スタックは、push()関数およびpop()関数を実装する ・スタックへの要素の追加はpush()関数で行う ・スタックからの要素の取出はpop()関数で行う ・スタックのサイズは任意とする int push(int push_data);  引数: スタックに追加するデータ  戻り値: 成功の場合1、失敗の場合0を返す int pop(int *pop_data);  引数: スタックから取り出した値を格納するポインタ  戻り値: 成功の場合1、失敗の場合0を返す いざ、自分で作ってみると、 仕様通りには全く作れず、結局main関数ですべてを作って しまうことになってしまいます・・

  • キューとスタックの問題です、宜しくお願いします

     (多分基本情報処理に関する問題だと思うのですが)データ構造に関する問題です、いくら考えても分かりません、宜しくお願いします。 【問】空の状態のキューとスタックの二つのデータ構造がある。 次の手続きを順に実行した場合、変数xに代入されるデータはどれか。 ここで、 ・データyをスタックに挿入することをpush(y) ・スタックからデータを取り出すことをpop( ) ・データyをキューに挿入することをenq(y) ・キューからデータを取り出すことをdeq( ) と表す。 (1)push(a) (2)push (b) (3)enq(pop( )) (4)enq(c) (5)push(d) (6)push(dep( )) (7)pop( ) → x 以上の答えとして(6)にはbがスタックにpushされるので、後入れ先出し を考えると当然「xにはb」が入るはずなのですが、どうも答えは「d」となっています。 「d」は「b」より前にスタックされてますので、最新で取出される情報は「b」しかないと思うのですが、誰か誤りを指摘してください、宜しくお願いします。

  • スタックモジュール

    「スタックモジュール」を作ることを考える。データ構造の定義と、以下の操作の定義を書け。ただしC言語を使え。 create 空のスタックを作る push スタックにデータを一つ挿入 pop スタックトップのデータを返すとともに、そのデータをスタックから削除 という問題です。 私は、C言語でのスタック構造は配列でしか扱ったことがなく、「スタックモジュール」の意味がよくわかりません。スタック構造はFILOのデータ構造ですが、これをC言語で書こうとすると配列を宣言して終わってしまう気がします。 create・push・popは、int (&num){......}のように普通に関数を宣言すればよいのでしょうか。 どなたか教えてください。

  • (ソフ開)(平成19年秋午前問題)問9の質問

    こんにちは。 表題の問題、教えていただきたいです。 問題のテキストをコピーできないので、リンクを書きます。 http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2007h19_2/2007h19a_sw_am_qs.pdf 私の理解としては、A、B、Cの順序で入力するとしたら、Cを取り出すために、 1回でできる。Bを取り出すために、C,Bを出力するから、2回。 Aを取り出すために、C,B,Aを出力するから、3回。 ですから、全部で1+2+3=6回と思いますが、 なぜ答えが5回でしょうか。 そもそもこの問題の題意を理解を理解できていないのかな。 お分かりになる方がいらっしゃいましたら、ぜひご教授ください。 よろしくお願いいたします。

  • 平成16年第10問です。

    「2種類の文字”A””B”を一個以上、最大n個ならべた符号を作る。60通りの符号を作るときのnの最小値はいくつか」 という問題です。 私はA,Bを0、1に見立てれば2進数と同じだと思い、 6桁の2進数111111が63となり、60を超えるので 6こかな、と思ったのですが、 なぜか回答は5でした。 回答によると 2^1=2通り 2^2=4通り 2^3=8通り 2^4=16通り 2^5=32通り だから 2+4+8+16+32=62 だと言うのです。 ???? 何で足すの???? 考えれば考えるほどわけがわかりません。 わかる方、どうか教えてください

  • ハードウェアでスタック構造をサポート2

    (c)一般的なアーキテクチャではハードウェアでスタック構造をサポートしているものが多いが、その機構を説明せよ。 スタック操作という手法がある。スタック操作は,スタック・ポインタで操作するアドレスを保持し,スタックへ書き込み(押し込み)したデータ数だけポインタ値を調整する手法のこと.スタックへのデータ格納命令(PUSH,CALLなど)を実行すると,スタック・ポインタが保持するアドレスは格納データ数だけ若くなり,逆にデータ取り出し命令(POP,RETなど)を実行するとそのデータ数だけポインタ値は大きくなる。 (d)前問で説明したストック構造の代表的な使い方を説明せよ。 アドレス修飾レジスタの中でスタックポインタ(SP)を持つものがある。スタックポインタはアドレスレジスタの一種で、コールスタックの先頭を指すポインタレジスタである。これが示すアドレスの内容を読み出すと同時にアドレスを増やす、逆に、示すアドレスに書き込むと同時にアドレスを減らす、といった動作を行えるものが多い。 というふうにまとめてみました。ご確認お願い致します。  

  • 基本情報試験 平成23年 春 特別試験 午後問2

    自己採点していますが、どうしても理解できない問題があります。 午後問2のa,bがどうしてもわかりません。 回答方法を教えてください。

  • H8マイコン スタック領域について

    スタック領域について教えて下さい。 [動作環境]  開発環境:ルネサス HEW Version 4.08  マイコン:ルネサス H8/1653  コンパイラ:H8SX,H8S,H8ファミリ用C/C++コンパイラパッケージ V7.00 HEWにて新規作成しますと、セクション定義にスタック領域(S)のアドレスと stacksct.h 内に スタック領域のサイズ #pragma stacksize 0x200 が自動で生成されると思います。 しかし、入手したH8/1653用のサンプルには #pragma stacksize のような サイズ指定がありませんでした。 [サンプル] (1)セクション定義やスタック領域のサイズ指定が無い (2)サブコマンドファイル(xxxx.sub)内でアドレスは設定されているが サイズの設定が無い。 -- サブコマンドファイル(xxxx.sub)-- START  CStart/00000000; START  P,C,D/00000400; START  B,R/00FF2000; START S/00FFC000; [質問]  質問1   (1)のスタック領域はどこに配置されるのでしょうか?  質問2   (2)のスタック領域は 00FFC000 を基準にどう確保   されるのでしょうか? (a)の方向へ確保?(b)の方向へ確保?          00F00000 (a)         ↑       00FFC000 (設定アドレス)         ↓       00FFFFFF (b)        質問3   (1)、(2)共にスタック領域と同時にヒープ領域も指定がありません。   これらは指定しなくても問題ないものなのでしょうか?   また、熟練者の方は指定しないものなのでしょうか? よろしくおねがいします。

このQ&Aのポイント
  • VALUESTAR G タイプNの電源ON時に短いビープ音3回鳴る問題が発生しています。Windowsは正常に立ち上がりますが、このビープ音の原因と対処法を知りたいです。
  • VALUESTAR G タイプNのパソコンを起動すると、短いビープ音が3回鳴ります。Windowsは正常に立ち上がるため、問題はありませんが、このビープ音についての原因と解決策を教えてください。
  • VALUESTAR G タイプNのPCを使っているのですが、電源を入れると短いビープ音が3回鳴ります。問題はなさそうですが、このビープ音の原因と対処法について教えてください。
回答を見る

専門家に質問してみよう