• ベストアンサー

参考書を読んでいたのですがわからないことがありまし

参考書を読んでいたのですがわからないことがありました。 「スタックは後から格納したデータを先に取り出す、後入先出し型のデータ構造です。計算の途中結果を格納しておき、別の計算を行った後で途中結果を取り出す場合には、スタックを利用するのが適しています。」 と本に書いてあったんですが、計算の途中結果を格納しておき、別の計算を行った後で途中結果を取り出す場合とはどういうことでしょうか?

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

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

あなたが宿題をしているとします。 ↓ 電話がかかってきたので、「宿題をしている状態」をスタックに保存して 電話に出ます。 ↓ 電話が終わらないうちにお母さんが「お風呂わいたよ」って言ってきたので、 電話中の相手に「ちょっと待って」と言ってスタックに入れ、 「はーい」と返事する。 ↓ ↓ 電話してたことをスタックから取り出し、電話を再開する。 ↓ 電話が終わったので、宿題をしていることをスタックから取り出し、宿題を続ける。 と、まぁ、こんなだれでもやっていることをしているだけです。 コンピュータは頭が1つなので保存しておかないと元に戻れないんですね。 スタックが壊れちゃうと宿題も電話も途中でほったらかしになります。

saiumalsei
質問者

お礼

意外と簡単でした ありがとうございます

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

(a+b) * (c+d*e) = ? aとbを足す。結果をスタックに入れておく。 cをスタックに入れておく。d と e を掛ける。スタックから取り出して(=c)それと足す。 スタックから取り出して(=a+b)それと掛ける。

  • HogePiyo
  • ベストアンサー率57% (24/42)
回答No.3

まず、あなたは中学生という設定です。 頭にボックスを思い浮かべてください。そのボックスは参考書がぴったりと入るボックスです。 あなたは試験前なので国語、数学、英語、社会、理科の参考書を使って勉強をするとします。 まずは国語の参考書です。国語の勉強のノルマが終わりました。国語の参考書をボックスにいれます。 次に数学です。国語と同じようにノルマをこなしたらボックスに入れます。 次の日にまた、昨日と同じように勉強をしようと思います。 ボックスから参考書を取り出して勉強しようとします。ボックスは参考書にぴったりのサイズですので取り出すとしたら最後に入れた理科の参考書を取り出すことになります。 その下には当然昨日と逆の順で参考書を取り出すことになります。 スタックとはこのボックスのことです。 あとから入れたデータが最初に取り出すことができるというデータ構造のことをスタックと呼びます。 プログラミングでは時々別の処理が行われない限り次の処理ができないことがあります。 ですのでまず今行っている処理に関するデータなどを退避させておいて別の処理を行い、その処理の結果に基づいて次の処理を行います。 以上のような退避場所のことをスタックと言います。

saiumalsei
質問者

お礼

例をあげて説明してくださってありがとうございます!

noname#206655
noname#206655
回答No.2

機械語を翻訳するソフトをアッセンブラと言いますが、余り使われて無いと思います。方やBASICとかC言語とか、コンパイラと言います。コンパイラで変数を定義するとスタックポインタを使うようです。 流れ作業と言うか、コンベアで流れるのが通常の考え方でしょうが、スタックポインタは箪笥のシャツと言うか5枚しまうと、新しいのが上にきます。新しい順に使わないと4枚目がきません。 アッセンブラの時代は何回PUSHしたか、その回数だけPOPします。 今は回数などを記憶する必要もありません。 昔は call 1234 でスタックが2 push ax push bx  ・  ・  ・ pop bx pop ax ret     スタックに戻り番地がありました。 javaの場合、意識しなくて良いと思います。

saiumalsei
質問者

お礼

アセンブラの話でしたか でもいい勉強になりましたありがとうございます