スタックは後入れ先出し (LIFO) データ構造です
キューは先入れ先出しです-out (FIFO) 構造
スタックは線形構造であり、配列と比較すると、スタックに対応する演算は配列のサブセットです。
一方の端からのみ要素を追加でき、一方の端からのみ要素を削除できます (この端はスタックの最上位と呼ばれます)。
スタックは広く使用されているデータ構造であり、コンピュータの使用においては、コンパイラの字句解析、Java 仮想マシン、ソフトウェアの元に戻す操作 (Undo)、ブラウジングなど、広く使用されています。コンパイラでのロールバック操作、コンパイラでの関数呼び出し実装など。
インターフェイス | 説明 | 複雑さ |
---|---|---|
void Push(E e) | スタックに要素を追加 | #O(1)均等に分割 |
スタックの最上位要素をポップします | O(1) | 均等に分散|
スタックの最上位要素を表示 | O(1) | |
Getスタック内の要素の数 | O(1) | |
スタックが空かどうかを判断します | O(1) |
O(n) はどのような問題を説明しますか?
スタックは配列またはリンク リストを通じて実装できます。ここでは配列を使用して上記のインターフェイスを実装します。
スタックの設計では、ユーザーはスタックの最上位要素へのアクセスとスタック長のみに注意を払うため、設計コードは次のとおりです。
読者は
スタックこのデータ構造は、LeetCode の問題番号 20: 有効な括弧を解決するために使用されます。毎日の計算: 有効な括弧も確認できます。 Queue
要素は一方の端 (キューの最後) からのみ追加でき、要素はもう一方の端 (キューの先頭) からのみ取り出せます。
キューの適用は、プレーヤー上のプレイリスト、データ ストリーム オブジェクト、非同期データ送信構造 (ファイル IO、パイプ通信、ソケットなど) に反映できます。もちろん、最も直感的なのはキューです。 . .
キューの実装
説明 | 複雑さ | |
---|---|---|
Enqueue | O(1) | 均等分散|
Dequeue | O(n) | ##E getFront() |
O(1) | #int getSize() | #キュー要素の数を取得|
boolean isEmpty() | キューが空かどうかを判定 | ##O(1)|
Enterキュー キューの最後から開始してサイズ変更がトリガーされる可能性があるため、均等に分散されるのは O(1) です。デキューはキューの先頭で行われ、配列の実装では毎回 O(n) ごとにすべての要素を移動する必要があります。 |
以上がJavaスタックとキューを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。