134

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

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

スタックとキューをどのように区別しますか?

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

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

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

キューは、新しい要素を既存の要素の後ろに配置することで追加され、キューの前の要素を削除することで短縮される一連の要素です。ADT[抽象データ型]です。これらの用語には、Java、C++、Python などのプログラミングで理解されるものは他にもあります。

より詳細な回答をいただけますか?私を助けてください。

4

12 に答える 12

158

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

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

于 2012-06-11T05:46:47.880 に答える
144

紙の束を想像してみてください。スタックに最後に置かれたピースが一番上にあるため、最初に出てきます。LIFOです。紙を追加することを「押す」、紙を取り除くことを「ポッピング」と呼びます。

の行列を想像してみてください。最初に列に並んだ人が、最初に列から外れた人です。これはFIFOです。列に並ぶ人は「エンキュー」され、列から外れる人は「デキュー」されます。

于 2016-01-27T07:28:02.300 に答える
38

どちらも順序付けられたリスト (リストに追加された時点で順序付けられたもの) と考えることができます。2 つの主な違いは、新しい要素がリストに入り、古い要素がリストから出る方法です。

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

キューについても、同じ方法で新しい要素を追加します。追加後にa,b,cなります。しかし、ポップすると、リストの先頭から要素を取得する必要があるため、 になります。a,b,c,ddb,c,d

とても簡単です!

于 2012-06-11T05:47:51.423 に答える
7

スタックは要素のコレクションであり、一度に 1 つずつ格納および取得できます。要素は、保存された時間とは逆の順序で取得されます。つまり、最後に保存された要素が次に取得される要素になります。スタックは、後入れ先出し (LIFO) または先入れ先出し (FILO) 構造と呼ばれることもあります。以前に格納された要素は、最新の要素 (通常は「トップ」要素と呼ばれる) が取得されるまで取得できません。

キューは要素のコレクションであり、一度に 1 つずつ格納および取得できます。要素は保存された時間順に取得されます。つまり、最初に保存された要素が次に取得される要素になります。キューは、先入れ先出し (FIFO) または後入れ先出し (LILO) 構造と呼ばれることがあります。その後に格納された要素は、最初の要素 (通常は「フロント」要素と呼ばれます) が取得されるまで取得できません。

于 2012-06-11T05:46:35.427 に答える
2

STACK: スタックは、スタックの一番上にある要素のみを挿入または削除できる要素のリストとして定義されます

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

スタックは要素のコレクションであり、一度に 1 つずつ格納および取得できます。要素は、保存された時間とは逆の順序で取得されます。つまり、最後に保存された要素が次に取得される要素になります。スタックは、後入れ先出し (LIFO) または先入れ先出し (FILO) 構造と呼ばれることもあります。以前に格納された要素は、最新の要素 (通常は「トップ」要素と呼ばれる) が取得されるまで取得できません。

列:

キューは、同じタイプの要素のコレクションです。これは、リストの一方の端 (リストの後方) で挿入を行うことができ、リストの前方と呼ばれるもう一方の端でのみ削除を行うことができる線形リストです。

キューは要素のコレクションであり、一度に 1 つずつ格納および取得できます。要素は保存された時間順に取得されます。つまり、最初に保存された要素が次に取得される要素になります。キューは、先入れ先出し (FIFO) または後入れ先出し (LILO) 構造と呼ばれることがあります。その後に格納された要素は、最初の要素 (通常は「フロント」要素と呼ばれます) が取得されるまで取得できません。

于 2013-04-17T15:09:19.310 に答える
2

スタックとキューの説明を単純化しすぎると、どちらもチェーンの一方の端からアクセスできる情報要素の動的なチェーンであり、両者の唯一の実際の違いは次の事実です。

スタックを操作するとき

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

キューで

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

:チェーンから要素を取得したり、ある意味で要素を読み取ったりその値にアクセスしたりするだけの場合があるため、このコンテキストでは取得/削除の抽象的な表現を使用していますが、要素を削除する場合もありますチェーンと最後に、同じ呼び出しで両方のアクションを実行する場合があります。

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

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

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

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

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

于 2016-10-13T12:43:53.113 に答える
1

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

QUEUE は FIFO リスト (First In First Out) です。つまり、1 つの要素が最初に挿入され、最初に削除されます。たとえば、人のキューです。

于 2014-03-09T15:03:22.573 に答える