web-dev-qa-db-ja.com

スタックとキューの基本的な違いは何ですか?

スタックとキューの基本的な違いは何ですか?

違いを見つけることができない私を助けてください。

Howスタックとキューを区別しますか?

私はさまざまなリンクで答えを検索し、この答えを見つけました。

高水準プログラミングでは、

スタックは、既存の要素の「上に」新しい要素を配置することによって長くなり、既存の要素の上から要素を削除することによって短くなる要素のリストまたはシーケンスとして定義されます。それは "プッシュ"と "ポップ"の数学演算を持つADT [抽象データ型]です。

キューとは、既存の要素の後ろに新しい要素を追加することで追加され、キューの前の要素を削除することで短縮される一連の要素です。これはADT [Abstract Data Type]です。これらの用語には、Java、C++、Pythonなどのプログラミングではもっと多くのことが理解されています

もっと詳しい答えをもらえますか。私を助けてください。

119

Stack はLIFO(後入れ先出し)データ構造です。ウィキペディアへの関連リンクには、詳細な説明と例が含まれています。

Queue はFIFO(先入れ先出し)のデータ構造です。ウィキペディアへの関連リンクには、詳細な説明と例が含まれています。

143
jhonkola

想像する 紙のスタック。スタックに最後に置かれたピースが一番上にあるので、最初に出てくるものです。これは LIFO。一枚の紙を追加することを「押す」と言い、一枚の紙を取り除くことを「ポッピング」と言います。

想像する 店で並べる。列の最初の人は、列から外れる最初の人です。これは FIFO。ラインに入った人は「エンキュー」され、ラインから出た人は「デキュー」されます。

107
123

ビジュアルモデル

パンケーキスタック(LIFO)

追加または削除する唯一の方法は上からです。

pancake stack

キュー(FIFO)

到着するとキューの最後に到着し、離れるとキューの先頭に移動します。

dmv line

おかしな事実:イギリスは人の並びを Queue と表しています

62
Jacksonkr

あなたは、物事の順序付けられたリスト(それらがリストに追加された時間によって順序付けられた)として両方を考えることができます。この2つの主な違いは、新しい要素がリストに入る方法と古い要素がリストから出る方法です。

スタックの場合、a, b, cというリストがあり、dを追加すると、最後に固定されるので、a,b,c,dになります。リストの要素をポップしたい場合は、最後に追加したd要素を削除します。ポップの後、私のリストは再びa,b,cになりました

キューの場合も同じように新しい要素を追加します。 dを追加すると、a,b,ca,b,c,dになります。しかし、今私がポップするとき、私はリストの先頭から要素を取らなければならないので、それはb,c,dになります。

とても簡単です。

36
cdesrosiers

キュー

キューはアイテムの順序付けられたコレクションです。

アイテムはキューの「フロント」エンドと呼ばれる一端で削除されます。

アイテムはキューの「後部」と呼ばれるもう一方の端に挿入されます。

最初に挿入されたアイテムが最初に削除されます(FIFO)。

スタック

スタックは項目の集まりです。

最後に挿入されたアイテムという1つのデータアイテムのみにアクセスできます。

アイテムは「スタックの一番上」と呼ばれる一端に挿入され、削除されます。

それはダイナミックで絶えず変化するオブジェクトです。

すべてのデータ項目はスタックの一番上に置かれ、一番上から取り除かれます

このアクセス構造は後入れ先出し構造(LIFO)として知られています。

14
Dissanayake

STACK:

  1. スタックは要素のリストとして定義されており、その中でスタックの先頭にのみ要素を挿入または削除できます。
  2. スタックの動作は後入れ先出し(LIFO)システムのようなものです。
  3. スタックは関数間でパラメータを渡すために使用されます。関数を呼び出すと、パラメータとローカル変数はスタックに格納されます。
  4. 再帰をサポートするPascal、cなどの高水準プログラミング言語は、簿記にスタックを使用します。各再帰呼び出しでは、パラメーターの現在値、ローカル変数、および戻りアドレス(呼び出し後にコントロールが戻る必要のあるアドレス)を保存する必要があります。

QUEUE:

  1. キューは同じタイプの要素のコレクションです。これは、リストの片側で挿入を行うことができる線形リストで、リストのrear、削除は、リストの前部と呼ばれる反対側でのみ実行できます。
  2. キューの動作は先入れ先出し(FIFO)システムに似ています。
13
ASHUTOSH KUMAR

スタックは要素の集まりで、一度に1つずつ格納および取得できます。要素はそれらの記憶時間の逆の順序で検索される、すなわち記憶された最新の要素が検索されるべき次の要素である。スタックは、後入れ先出し(LIFO)または先入れ先出し(FILO)構造とも呼ばれます。以前に保存された要素は、最新の要素(通常は「最上位」要素と呼ばれる)が取得されるまで取得できません。

キューは要素の集まりで、一度に1つずつ格納および取得できます。要素はそれらの格納時間の順序で検索される、すなわち格納された最初の要素は検索されるべき次の要素である。キューは、先入れ先出し(FIFO)または後入れ先出し(LILO)構造とも呼ばれます。それ以降に保存された要素は、最初の要素(通常は 'front'要素と呼ばれる)が取得されるまで取得できません。

5
Saurabh R S

スタックとキューの記述を単純化し、過度に単純化するために、これらはどちらもチェーンの一方の端からアクセスできる動的な情報エレメントのチェーンであり、それらの間の唯一の本当の違いは以下の事実です。

スタックを扱うとき

  • チェーンの一方の端に要素を挿入します。
  • チェーンの同じ端から要素を取得または削除する

待ち行列ありながら

  • チェーンの一方の端に要素を挿入します。
  • 相手側からそれらを取得/削除します

NOTE:この文脈では取り出し/削除という抽象表現を使用しています。チェーンから要素を取り出すだけの場合や、ある意味でそれを読むかその値にアクセスする場合がありますがまた、チェーンから要素を削除したときと、同じ呼び出しで両方のアクションを実行したときのインスタンスもあります。

また、Word要素は、仮想チェーンを可能な限り抽象化し、特定のプログラミング言語の用語から切り離すために意図的に使用されています。 elementと呼ばれるこの抽象情報エンティティは、言語に応じて、ポインタ、値、文字列、文字、オブジェクトなど、何でもかまいません。

しかし、ほとんどの場合、それは実際には値またはメモリ位置(すなわちポインタ)のいずれかである。そして残りは言語の専門用語の後ろにこの事実を隠しているだけです。

要素の順序が重要で、要素が最初にプログラムに入ったときとまったく同じである必要がある場合は、キューが役立ちます。たとえば、オーディオストリームを処理するときやネットワークデータをバッファするときなどです。あるいは、何らかのタイプのストアアンドフォワード処理をしたとき。これらすべての場合において、あなたはそれらがあなたのプログラムに入って来たのと同じ順序で出力される要素のシーケンスを必要とします、さもなければ情報は意味をなさないかもしれません。そのため、ある入力からデータを読み取り、処理してキューに書き込む部分と、キューからデータを取り出す部分を処理して別のキューに格納してさらに処理またはデータを送信する部分でプログラムを分割することができます。 。

スタックは、プログラムの即時ステップで使用される予定の要素を一時的に格納する必要がある場合に役立ちます。たとえば、プログラミング言語は通常、変数を関数に渡すためにスタック構造を使用します。彼らが実際にすることは、スタックに関数の引数を格納(またはプッシュ)してから、スタックから同数の要素を削除および取得(またはポップ)する関数にジャンプすることです。このように、スタックのサイズは関数のネストされた呼び出しの数に依存します。さらに、関数が呼び出されてそれがしていたことを終えた後、それは呼び出される前とまったく同じ状態にスタックを置きます!このようにして、他の機能がどのように機能するかを無視して、任意の機能がスタックと共に機能することができます。

最後に、同様の概念のために他にも用語が使用されていることを知っておく必要があります。たとえば、スタックはヒープと呼ばれることがあります。たとえば、両端キューはスタックからもキューとしても同時に動作できるため、これらの概念のハイブリッドバージョンもあります。両端から同時にアクセスできるからです。さらに、データ構造がスタックまたはキューとして提供されるということは、必ずしもそのように実装されることを意味するわけではなく、データ構造を任意のものとして実装でき、特定のものとして提供できる場合があります。データ構造は、単にそのように振る舞わせることができるからです。言い換えれば、プッシュアンドポップメソッドを任意のデータ構造に提供すると、それらは魔法のようにスタックになります。

1

STACK:スタックは要素のリストとして定義され、そこではスタックの先頭にのみ要素を挿入または削除できます。

スタックは関数間でパラメータを渡すために使用されます。関数を呼び出すと、パラメータとローカル変数はスタックに格納されます。

スタックは要素の集まりで、一度に1つずつ格納および取得できます。要素はそれらの記憶時間の逆の順序で検索される、すなわち記憶された最新の要素が検索されるべき次の要素である。スタックは、後入れ先出し(LIFO)または先入れ先出し(FILO)構造とも呼ばれます。以前に保存された要素は、最新の要素(通常は「最上位」要素と呼ばれる)が取得されるまで取得できません。

キュー:

キューは同じタイプの要素のコレクションです。それは挿入がリストの後ろと呼ばれるリストの一端で起こることができる線形リストであり、削除はリストの前と呼ばれる他端でのみ起こることができます

キューは要素の集まりで、一度に1つずつ格納および取得できます。要素はそれらの格納時間の順序で検索される、すなわち格納された最初の要素は検索されるべき次の要素である。キューは、先入れ先出し(FIFO)または後入れ先出し(LILO)構造とも呼ばれます。それ以降に保存された要素は、最初の要素(通常は 'front'要素と呼ばれる)が取得されるまで取得できません。

1
shashimani

STACKはLIFO(後入れ先出し)のリストです。 3つの要素、すなわち10、20、30がスタックに挿入されると仮定する。 10が最初に挿入され、30が最後に挿入されるため、30がスタックから最初に削除され、10が最後にスタックから削除されます。これはLIFOリスト(Last In First Out)です。

QUEUEはFIFO list(先入れ先出し)です。最初に削除される要素が1つ先に挿入されます。

0

縦型コレクションと見なされます。まず、コレクションは他の小さいOBJECTSを集めて整理するOBJECTであることを理解してください。これらの小さなオブジェクトは一般的に要素と呼ばれます。これらの要素は、Aが最初、Cが最後の順にA B Cの順序でスタックに「プッシュ」されます。垂直にそれはこのように見えるでしょう:3番目の要素が追加された)C 2番目の要素が追加された)B 1番目の要素が追加されました)A

最初にスタックに追加された "A"が一番下にあることに注意してください。スタックから "A"を削除したい場合は、最初に "C"、次に "B"、最後にターゲット要素 "A"を削除する必要があります。スタックは、スタックの複雑さに対処しながらLIFOアプローチを必要とします(ラストインファーストアウト)スタックから要素を削除するとき、正しい構文はpopです。スタックから要素を削除するのではなく、ポップします。

「A」はスタックにプッシュされた最初の要素で、「C」はスタックにプッシュされた最後の項目です。 3つの要素がスタック上にあり、Aが最初のB、2番目の要素、Cが3番目の要素という順序でスタックの一番下にあるものを見たいと思う場合は、一番上の要素をポップオフしてください。スタックの下部を表示するために追加された2番目の要素。

0
Zimmermen7