• 締切済み

スタックとキューの使い所

こんにちは。つい二ヶ月前くらいにVBを始めた初心者なのですが、データ構造で、スタックとキューの二つのデータ構造の特徴(長所&短所)と、この二つを使うときというのは例えばどういう時なのかが全然わかりません。どなたかぜひ、教えていただけないでしょうか?

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

>二ヶ月前くらいにVB >スタックとキューとは とありますが、これを説明するには、レジスタなどの説明から入って、図解でやらないと難しいですね・・・ ところでVBの本か何かを見たのですか?ぼくは今まで「スタック/キュー」という言葉の出てくるVBの本は、あまり見た事がないですよ。他の言語でしかあまり使わない言葉ですね。 メモリの開放を使用としてるのですか? もし単純にスタック/キューの事を知りたいだけなら、VBの質問というより、プログラミング全般で質問した方が、適切な回答が得られるかも? 一応参考URLを載せておきます。 言語はCで書かれてますが、単純な演算子しか出てないので、理解できると思います。 たぶん本に書いてあるような事を書いてるだけだと思いますが・・・

参考URL:
http://www.ics.nara-wu.ac.jp/~makato/programmingpractice1/memo/lecturenotes_algorithm/ln4_plain.html
cremona
質問者

お礼

VBの本に載っていました。そうですかぁ…。いや、メモリの開放はでてきてないですけど…。とにかくありがとうございました。すぐに参考にのせていただいたページへ行ってみます!!

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

スタック:LIFO(Last In First Out)後から入った物が先に処理される。 キュー :FIFO(First In First Out)先に入ったものが先に処理される。 キューは通常の行列がすべて該当します。一番公平(?)な処理方法です。 スタックは新聞をダンボール箱に積んだり、一つしか入口のないバスに沢山の人を乗せたりした時に、出てくる順番が、乗った順番と逆転するものです。 特徴(長所、短所)というより、目的に合わせて使うと考えた方がいいです。 さて、本題の用途ですが、圧倒的にキューがよく使われます。 スタックを使うところだけ抜き出した方が楽です。すぐ思い付くものは (1)サブルーチンコールの戻りアドレスの待避 (2)再帰処理の時のデータエリアの待避 (3)レジスタ間のデータの交換(入替)・・・アセンブラ (4)コンパイラが数式を解読する時のバッファー 等です。

cremona
質問者

お礼

そうですかぁ…。ナルホド。じゃあキューの方が重要なんですね…。ありがとうございました!!

関連するQ&A

  • スタック、キュー、リスト、2分木の使い道は?

    主な定番データ構造として (1)スタック (2)キュー (3)リスト (4)2分木 これらのデータ構造がありますが、特に「スタック」と「キュー」は一体何に使えるのでしょうか? 「スタック」や「キュー」は使い道が思いつかないのですが、一体何に使えるのですか? データ構造である「スタック」「キュー」「リスト」「2分木」の使い道を教えてください。 よろしくお願いいたします。

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

     (多分基本情報処理に関する問題だと思うのですが)データ構造に関する問題です、いくら考えても分かりません、宜しくお願いします。 【問】空の状態のキューとスタックの二つのデータ構造がある。 次の手続きを順に実行した場合、変数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」しかないと思うのですが、誰か誤りを指摘してください、宜しくお願いします。

  • スタックとキュー

    スタックにデータを積む関数push、データを取り出す関数push、キューにデータを積む関数enqueue,データを取り出す関数dequeueを作成しろという課題がでたのですが、関数がさっぱりわかりません。あと、popやpushの他に関数は作らなければ動きませんか?メインはなんとかできそうです。

  • スタック

    スタックとはどのような特徴を持ち、またどのような用途に適した基本データ構造か? という質問にたいしてどう回答したら良いのでしょうか? メソッドやスワッピングのことに触れれば良いのでしょうか?

  • c言語 リストデータ構造 キュー スタック がわかりません

    ポインタを用いた線形リストデータ構造を利用して,キーボードから順に入力した複数の整数値(int型)を空の「スタック」および「キュー」にそれぞれ保存し,取り出した時,出力される整数値を順に表示するプログラム. 動作確認のために入力する整数値は,年号と月の数字の部分とせよ(2008年5月なら,「2→0→0→8→0→5」の順).また,スタックとキューに保存されているデータがどのような順で出力されるかをそれぞれ表示するようにせよ.(スタックの場合は「5→0→8→0→0→2」の順で出力され,キューの場合は「2→0→0→8→0→5」の順で出力されることを表示させ確認せよ) こうのようなプログラムを作らなくてはいけないのですが、まったくわかりません。参考にでもソースを教えていただけないでしょうか? また、詳しく解説されている(初級と中級レベルそれぞれについて)サイトや書籍がありましたらそちらもお願いいたします。

  • スタックモジュール

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

  • Delphiでキューを作りたい

    Delphi初心者です。ゲームを制作中なのですが、相談に乗って頂けますでしょうか。 プログラムの骨格は、演算→描画の繰り返しなんですが、演算結果を次々と描画ルーチンに渡すと、描画が間に合わなくなったときに破綻してしまいます。 (描画で使っているコンポーネントがクラッシュしてしまう) そこで、演算部で表示させるものを計算しキューに追加していき、CPUのアイドル時間を見つけてはキューから順次取り出して描画、という方法を試したいと思います。 (オーバーフローしたら破棄する) そこで、スタックとかキューを使ったことがないのですが、単純に配列を使って、 1.データを最後尾に加える 2.データを先頭から出し、順次前に詰める 簡単な方法があったら教えて頂きたいと思います。 (それくらい手動でやれと言われそうですね(^_^;) よろしくお願いいたします。

  • キューの実現方法

    配列によるキューの実現方法、リストによるキューの実現方法の二つのキューの実現方法について教えてください。 またその二つの長所、短所等もできればお願いします。 自分は大学院生ですが、化学が専攻なためパソコンやプログラムに関してあまり知識がありません。 文献等見てみたのですが、あまり意味がわかりません。 わかりやすく教えてもらえればうれしいです。 すいませんがよろしくお願いします。

  • スタックにおける「POP」という名前の由来は?

    データ構造におけるスタックにおいてスタックからデータを取り出すことを「POP」と呼びますが、そのスタックにおける「POP」という名前の由来は何なんでしょうか? 回答のほうよろしくお願いします。

  • C# 再帰よるスタックオーバーフローについて

    VB2008 C# でプログラムしていますが、 プログラムで再帰を多く行わなくてはならず、 スタックオーバーフローが出てしまいます。 スタックオーバーフローを解決するためには、アルゴリズムを変更し、 再帰の回数を減らすしか方法はないのでしょうか? もしスタックの上限を変更する方法などがありましたら教えてください。 VBは初心者なので、なるべく簡単にお願いします。

専門家に質問してみよう