スタックとキューは、ユーザーがプログラムで発生した問題を解決するのを支援するプログラミング言語の機能です。
スタックとキューはどちらも非プリミティブなデータ構造に大きく分類されますが、いくつかの点で互いに異なります。
主要な取り組み
- スタックは、最新の要素が最初に削除される後入れ先出し (LIFO) データ構造を実装しますが、キューは先入れ先出し (FIFO) 構造に従い、最も古い要素が最初に削除されます。
- スタックでは、挿入と削除の操作は上部で行われますが、キューでは、挿入は後部で、削除は前部で行われます。
- スタックは反転またはバックトラックが必要な状況に適していますが、キューは要素の順序をスケジュールまたは維持するシナリオに適しています。
スタックとキュー
スタックとキューの違いは、スタックの場合、要素の削除は一方の端から行われ、要素の追加は TOS として知られる順序付きリスト自体で行われることです。 一方、キューの場合、要素の削除と挿入は同じ端から行われます。
スタックは、非プリミティブと言える線形データ構造として説明できます。
一方の端から、事前に確立された要素が削除され、TOS またはスタックのトップと呼ばれるこの順序付きリストに新しい機能が追加されます。スタックは、PUSH や POP などの基本的な操作のパフォーマンスを発揮できます。
キューは、非プリミティブ タイプの線形データ構造ともみなされます。 似たような要素が集まったものです。
これにはレアエンドとフロントエンドという XNUMX つのエンドがあり、それぞれ要素が挿入または削除されます。 キューは、エンキューやデキューなどの基本的な操作を実行できます。
比較表
比較のためのパラメータ | スタック | キュー |
---|---|---|
動作原理 | スタックに関連付けられた動作原理は、LIFO またはリストの先出しタイプの最後と見なされます。 | このスタックのデータ構造では、要素の挿入と削除は同じ端で行うことができます。 |
ポインターと操作の使用法 | スタックで使用されるポインターの数は XNUMX つです。 このデータ構造で実行される操作は、プッシュとポップです。 | キューで使用されるポインターの数は XNUMX です。 このデータ構造で実行される操作は、エンキューとデキューです。 |
Structure | キューの場合、後端は要素の挿入に関係し、前端は要素の削除に関係します。 | キューとは異なり、スタック データ構造はバリアントに関連付けられません。 これに関連する実装はより簡単です。 |
バリアント | このデータ構造には、優先キュー、循環キュー、両端キューなどのバリエーションがあります。 その実装は比較的複雑です。 | スタックに関連付けられた空の状態の検査は Top == – 1 です。スタックの完全な状態の検査は Top == Max – 1 です。 |
状態の検査 | 空の状態の検査は、Front == -1|| です。 フロント ++ リア + 1、フルコンディションの検査はリア == Max – 1 です。 | 空の状態の検査は、Front == -1|| です。 フロント++リア+1、コンプリートコンディションの検査はリア==最大-1となります。 |
スタックとは何ですか?
挿入または削除は上から順に実行されるため、スタックに最後に追加された要素が削除されます。この目的のため、これは後入れ先出し型のリスト、または LIFO として知られています。
スタックには、ワード プロセッサの元に戻す機能、Java 仮想マシン、コンパイラの解析、プリンタの PostScript 言語など、いくつかの実装があります。
Web ブラウザの戻るボタン、コンパイラへの関数呼び出しの組み込みなど。スタックの実装は、静的実装と動的実装の 2 つの方法で行うことができます。
配列の助けを借りて静的実装で開発されたスタック。
静的実装は簡単であることが知られていますが、スタック サイズの宣言はプログラムの設計中にのみ許可され、その後は長さの検証を行うことができません。
静的実装は、メモリ使用率に関して高い効率性があるとは考えられていません。一方、動的実装はリンク リスト表現とも呼ばれます。
ポインタは、スタック型のデータ構造を実装するために使用されます。
たとえば、ビスケットの包装が片側で破れると、そこからビスケットを取り出す(ポップ)ことができ、ビスケットを元に戻す(プッシュ)ことができると言えます。
キューとは
これは、FIFO または先入れ先出しタイプのリストとみなされます。 キューの実装は、静的実装と動的実装に分岐できます。
静的実装において、キューの実装に配列を使用する場合、ラインに格納される要素の明確な数を事前に保証する必要があります。
これは、処理または設計の前に配列のサイズを確認する必要があるために行われます。 キューの前部はアレイの開始位置であり、後部はキューの最終位置で構成されます。
動的実装には、データ フィールドが存在するリンクされた表現があります。
リンクされた表現のメリットは、他の側面を構成するグループの途中で要素を挿入または削除する必要がある場合に明らかになります。
キューは、トラフィック分析、データバッファ、スーパーマーケットに必要なレジ係の数の決定など、さまざまな方法で適用できます。
プロセッサやプリンタなどの共有リソースへの要求の割り当て、データの非同期転送など。
たとえば、サービスを受けるのを待つとき、私たちはサービスを取得するためのキューを形成すると言えますが、これはキューと見なすことができます。
スタックとキューの主な違い
- スタックの動作原理は LIFO タイプのリストであることが知られていますが、キューの動作原理は FIFO タイプのリストです。
- ポインタの使用量はスタックの場合は XNUMX つ、キューの場合は XNUMX つです。
- スタックの場合、要素は同じ端から挿入および削除できます。 キューの場合、リアエンドは中毒に関連付けられ、フロントエンドは要素の削除に関連付けられます。
- スタックにはバリアントがありませんが、キューにはバリアントがあります。
- スタックの実装は単純ですが、キューの実装はスタックよりも複雑です。
私はすでにこれらすべてを知っていました。この記事は私にとって何も新しいことを提供しません。
この記事は、コンピューター サイエンスにおけるスタックとキューの概要を簡潔に示していると思います。
この記事で提供されている例は、スタックとキューの概念を理解するのに非常に役立ちます。
はい私は同意する。実際の例があると理解しやすくなります。
コンピュータープログラミングの基礎を復習するのに最適です。
この記事は非常に有益だと思いました。コンピューター サイエンスの基礎についてさらに学ぶことは常に良いことです。
この記事を読むのに時間を費やしたことが信じられません。これらはすべて基本的なコンピューター サイエンスに関するものであり、新しいものではありません。
スタックとキューの複雑な違いに気づきませんでした。とても興味深いですね。
はい、この記事はそれらの違いをうまく説明しています。