- ベストアンサー
参考書を読んでいたのですがわからないことがありまし
参考書を読んでいたのですがわからないことがありました。 「スタックは後から格納したデータを先に取り出す、後入先出し型のデータ構造です。計算の途中結果を格納しておき、別の計算を行った後で途中結果を取り出す場合には、スタックを利用するのが適しています。」 と本に書いてあったんですが、計算の途中結果を格納しておき、別の計算を行った後で途中結果を取り出す場合とはどういうことでしょうか?
- saiumalsei
- お礼率3% (18/466)
- Java
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あなたが宿題をしているとします。 ↓ 電話がかかってきたので、「宿題をしている状態」をスタックに保存して 電話に出ます。 ↓ 電話が終わらないうちにお母さんが「お風呂わいたよ」って言ってきたので、 電話中の相手に「ちょっと待って」と言ってスタックに入れ、 「はーい」と返事する。 ↓ ↓ 電話してたことをスタックから取り出し、電話を再開する。 ↓ 電話が終わったので、宿題をしていることをスタックから取り出し、宿題を続ける。 と、まぁ、こんなだれでもやっていることをしているだけです。 コンピュータは頭が1つなので保存しておかないと元に戻れないんですね。 スタックが壊れちゃうと宿題も電話も途中でほったらかしになります。
その他の回答 (3)
- notnot
- ベストアンサー率47% (4848/10262)
(a+b) * (c+d*e) = ? aとbを足す。結果をスタックに入れておく。 cをスタックに入れておく。d と e を掛ける。スタックから取り出して(=c)それと足す。 スタックから取り出して(=a+b)それと掛ける。
- HogePiyo
- ベストアンサー率57% (24/42)
まず、あなたは中学生という設定です。 頭にボックスを思い浮かべてください。そのボックスは参考書がぴったりと入るボックスです。 あなたは試験前なので国語、数学、英語、社会、理科の参考書を使って勉強をするとします。 まずは国語の参考書です。国語の勉強のノルマが終わりました。国語の参考書をボックスにいれます。 次に数学です。国語と同じようにノルマをこなしたらボックスに入れます。 次の日にまた、昨日と同じように勉強をしようと思います。 ボックスから参考書を取り出して勉強しようとします。ボックスは参考書にぴったりのサイズですので取り出すとしたら最後に入れた理科の参考書を取り出すことになります。 その下には当然昨日と逆の順で参考書を取り出すことになります。 スタックとはこのボックスのことです。 あとから入れたデータが最初に取り出すことができるというデータ構造のことをスタックと呼びます。 プログラミングでは時々別の処理が行われない限り次の処理ができないことがあります。 ですのでまず今行っている処理に関するデータなどを退避させておいて別の処理を行い、その処理の結果に基づいて次の処理を行います。 以上のような退避場所のことをスタックと言います。
お礼
例をあげて説明してくださってありがとうございます!
機械語を翻訳するソフトをアッセンブラと言いますが、余り使われて無いと思います。方やBASICとかC言語とか、コンパイラと言います。コンパイラで変数を定義するとスタックポインタを使うようです。 流れ作業と言うか、コンベアで流れるのが通常の考え方でしょうが、スタックポインタは箪笥のシャツと言うか5枚しまうと、新しいのが上にきます。新しい順に使わないと4枚目がきません。 アッセンブラの時代は何回PUSHしたか、その回数だけPOPします。 今は回数などを記憶する必要もありません。 昔は call 1234 でスタックが2 push ax push bx ・ ・ ・ pop bx pop ax ret スタックに戻り番地がありました。 javaの場合、意識しなくて良いと思います。
お礼
アセンブラの話でしたか でもいい勉強になりましたありがとうございます
関連するQ&A
- キューとスタックの問題です、宜しくお願いします
(多分基本情報処理に関する問題だと思うのですが)データ構造に関する問題です、いくら考えても分かりません、宜しくお願いします。 【問】空の状態のキューとスタックの二つのデータ構造がある。 次の手続きを順に実行した場合、変数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」しかないと思うのですが、誰か誤りを指摘してください、宜しくお願いします。
- ベストアンサー
- その他(パソコン)
- 回答群から選ぶのですが、
情報技術者様。 分かります所は教えてくださいまし。 1、1件分のデータ。 2、複数のデータをまとめたもの。 3、ほとんどのプログラミング言語で利用できる基本的なデータ構造 で、同じ型のデータを連続的に並べ、添字により識別する。 4、前後のデータの所在地をポインタにより連結するデータ構造で、デ ータの削除や挿入が容易である。 5、先に入力されたデータが先に出力される(先入先出法)データ構造。 6、後に入力されたデータが先に出力される(後入先出法)データ構造。 7、スタックで、データを入力すること。 8、スタックで、データを出力すること。 9、キューに、3→5→8と順に入力した後、最初に出力される値はい くつか。 10、スタックに、3→5→8と順に入力した後、最初に出力される値 はいくつか。 [回答群]キュー、ファイル、リスト、スタック、POP、配列、PUSH、レコード、3、5、8。
- ベストアンサー
- その他(データベース)
- Cプログラミングの関数電卓のアルゴリズムについてですが、
Cプログラミングの関数電卓のアルゴリズムについてですが、 標準入力からの文字列式を、トークンに区切り、先頭から配列型スタックに格納して、計算を行う処理を考えていて、 a-b-cという処理のアルゴリズムに困っています。 どういった解決策があるのか教えて頂けませんか?? お願いします!! フローチャートを書くほどの事でも無いと思うので、僕が考えていたアルゴリズムを、文で記載しますが、できれば、このアルゴリズムからどうすれば解決できるかを考えて頂けたらとても助かります!! 1. 別のスタックを用意して、元々のをstack1,コピー用をstack2とし、stack1のトップからstack2に格納。(スタックの構造は二次元文字型配列) この場合、cからstack2に格納される。 2. 演算子を見つけると、その前後の数字をその演算子によって処理。 この場合なら、c-bという処理。 3. 計算結果を、cが格納されていた、演算子の前に格納。 4.引き続き、この操作を繰り返す。 これを考えてたんですが、実行すると、(c-b)-aという式になり、違う答えが出てしまいます。加算ならば影響はでません。 きちんと(-c-b)+a の処理をさせるにはどうしたら良いかがわからないです。 お願いします!! ※返事が多少遅れるかもしれませんが、すみません!!
- ベストアンサー
- C・C++・C#
- ハードウェアでスタック構造をサポート2
(c)一般的なアーキテクチャではハードウェアでスタック構造をサポートしているものが多いが、その機構を説明せよ。 スタック操作という手法がある。スタック操作は,スタック・ポインタで操作するアドレスを保持し,スタックへ書き込み(押し込み)したデータ数だけポインタ値を調整する手法のこと.スタックへのデータ格納命令(PUSH,CALLなど)を実行すると,スタック・ポインタが保持するアドレスは格納データ数だけ若くなり,逆にデータ取り出し命令(POP,RETなど)を実行するとそのデータ数だけポインタ値は大きくなる。 (d)前問で説明したストック構造の代表的な使い方を説明せよ。 アドレス修飾レジスタの中でスタックポインタ(SP)を持つものがある。スタックポインタはアドレスレジスタの一種で、コールスタックの先頭を指すポインタレジスタである。これが示すアドレスの内容を読み出すと同時にアドレスを増やす、逆に、示すアドレスに書き込むと同時にアドレスを減らす、といった動作を行えるものが多い。 というふうにまとめてみました。ご確認お願い致します。
- ベストアンサー
- ハードウェア・サーバー
- 棚卸資産
前期繰越及び期中の仕入れと売り上げが、次の表であるとします。 仕入れ 前期繰越-----数量=10個、単価=100円 5月1日------数量=15個、単価=90円 10月15日--数量=5個、単価=70円 売り上げ 4月20日----数量=4個 8月31日----数量=8個 11月20日--数量=6個 期末に一括して後入れ先出し法によって棚卸資産を評価した場合に、その棚卸高を計算する問題なのですが、 まず前期繰越で100*10ある。 4月20日に4個売れて100*6残る。 5月1日で仕入れて100*6と15*90になる。 8月31日で100*6と7*90になる。 10月15日で100*6,7*90,5*70となる。 11月20日で100*6+6*90=1140円分の棚卸高となる、と計算したのですが、 間違ってるのでしょうか・・・・答えは1180円になっているのです。 後入れ先出しだからこの計算でいいはずだと思っていたのですが、、、
- ベストアンサー
- 情報処理技術者
- スタックを用いたプログラム
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関数ですべてを作って しまうことになってしまいます・・
- ベストアンサー
- C・C++・C#
- C# スタックに格納する要素が配列について
スタックに格納する要素が配列の場合 // スタック生成 Stack<int[]> StackObj = new Stack<int[]>(); // 格納する配列データーの作成 int[] ArrayWork = new int[2]; ArrayWork[0] = 7; ArrayWork[1] = 12; // スタックに格納 StackObj.Push(ArrayWork); のように記述できます 同様に、POP、PEEP、COUNTの場合、どのように記述すればいいでしょうか?
- ベストアンサー
- C・C++・C#
- 構造設計の勉強のために、おすすめの参考書を教えてください。
構造設計の勉強のために、おすすめの参考書を教えてください。 現在、工務店で雑事務及び設計補助などをやっておりますが、自分でも構造設計ができるようになりたいと思い、勉強を始めました。 これまでは、木造住宅の壁量計算やN値計算程度しか経験がなく、本格的な構造設計は初心者です。 仕事の依頼としては、木造住宅のリフォームが多いのですが、まれに1階S造+2階木造といった感じで、増改築なども出ます。 その際に私が構造設計ができれば、外注することもなくなるので、経費&時間節約になります。 自身で調べてみて、購入を検討しているのは、上野嘉久先生の構造設計シリーズです。 他には『初めての建築構造設計~構造計算の進め方~』という本を購入し、勉強中です。 他にも参考にするとよい本がありましたら、紹介してください。 できるだけ多くの資料をもとに勉強していきたいと思っているので、宜しくお願いします。
- ベストアンサー
- 建築士
- 大学院の専門科目(情報学科)のお勧め参考書☆★
ご覧頂きありがとうございます、私は現在機械科に所属する大学3年生です。 来年に他大学の情報科の院を受験したいのですが、入学試験科目に「データ構造とアルゴリズム」「計算機システム」という今までに勉強したことのない科目が含まれていて、その対策としてとりあえず基本情報技術者試験の勉強をしていますが、対策としては十分でない気がします。 もしご覧になっている皆様の中に上記二つの科目についてお勧めの参考書、又は勉強法をご存知な方は教えてもらえないでしょうか?どうぞよろしくお願い致します。 ------------------詳しい範囲-------------------- [計算機システム] 計算機の物理的、論理的な構造、機能、動作に関する理解を問う。具体的には、計算機アーキテクチャおよびオペレーティングシステムについて、機械語命令、アセンブリ言語、命令実行パイプライン、割込み制御、記憶階層、プロセス管理、記憶管理、同期管理、ファイル管理などから出題する。 [データ構造とアルゴリズム] 計算機のプログラミングで用いられるアルゴリズムとデータ構造についての理解を問う。具体的には、線形リスト,スタック、キュー、探索、整列、グラフアルゴリズム、アルゴリズム解析などから出題する。基本的なプログラミングの素養(私はC言語は使えます)を必要とする。
- 締切済み
- 大学・短大
- 戻り番地を逃がしておくの意味が分かりません
いつもお世話になっております。独学で情報処理の勉強をしています。昨日CASLIIをキャスルツーと読むことを知ったぐらいです。「なるべく専門用語を使わないで答えてくださる方」よろしくお願いします。 基本情報午後の選択はCASLIIがいいと思って参考書を読んでみたのですが、とても難しく、ネットで検索していたら理解を深めるための記事みたいのがあったのですが、【主プログラムから副プログラムのデータの受け渡し】ということで以下のことが書かれてます。 LAD GR1,123 ;GR1に123を格納する(主プログラムの先頭) PUSH 0,GR1 ;123をスタックに格納する LAD GR2,456 ;GR2に456を格納する PUSH 0,GR2 ;456をスタックに格納する CALL SUB1 ;副プログラムSUB1を呼び出す POP GR3 ;加算結果をスタックからGR3に取り出す : ;これ以降の処理は省略する SUB1 POP GR4 ;戻り番地を逃がしておく ←これ!! POP GR1 ;GR1に456を取り出す(副プログラムの先頭) POP GR2 ;GR2に123を取り出す ADDA GR1,GR2 ;GR1とGR2の加算結果をGR1に格納する PUSH 0,GR1 ;加算結果をスタックに格納する PUSH 0,GR4 ;戻り番地を元通りにする ←ここも!! RET ;主プログラムに戻る(副プログラムの末尾) の、戻り番地を逃がしておくが意味がよく分かりません。なので、戻り番地を元通りにするもよく分かりません。 よろしくお願いします。
- ベストアンサー
- 情報処理技術者
お礼
意外と簡単でした ありがとうございます