stacks queues stl
例を使用して、STLでのスタックとキューの実装について学習します。
スタックとキューは、本質的に非常に基本的なSTLの2つのコンテナーです。これらは、ソフトウェアプログラミングで幅広いアプリケーションを持つ最も単純なコンテナです。
このチュートリアルでは、STLでのこれら両方のコンテナーの詳細な実装を確認します。また、例を使用して、スタックとキューでサポートされているさまざまな操作についても説明します。
=> ここで簡単なC ++トレーニングシリーズに注意してください。
学習内容:
スタック
STLのスタックコンテナは、コンテナアダプタの一種です。これは、C ++でスタックデータ構造を複製するために使用されます。スタックコンテナは、要素が一方の端に挿入され、同じ端からも削除される要素のセットです。
この追加と削除の共通点は、「スタックのトップ」として知られています。
スタックの図解を以下に示します。
上記の表現に示されているように、スタックは、スタックのトップと呼ばれる同じ端から要素が追加および削除されるコンテナです。
追加と削除は同じ端で行われるため、スタックコンテナはLIFO(後入れ先出し)タイプの作業であると言えます。これは、最初に追加された要素が最後に削除される要素になることを意味します。
スタックコンテナを実装するには、プログラムにヘッダーを含める必要があります。
#include
スタックコンテナの一般的な宣言構文は次のとおりです。
stack stackName;
スタック操作
次に、STLのスタックコンテナがサポートするさまざまな操作について説明します。
- 押す :プッシュ操作は、スタックに要素を挿入するために使用されます。この操作では、常にスタックの最上位に要素が追加されます。
整数型の空のスタックmystackを考えてみましょう 。
次に、要素1をスタックに追加しましょう。
次に、要素3をスタックに追加します。
表現によれば、プッシュ操作の結果として、要素がスタックの一番上に追加されます。すべてのプッシュ操作の後、スタックのサイズは1ずつ増加します。
- ポップ :ポップ操作は、スタックから要素を削除するために使用されます。削除された要素は、スタックの最上位が指している要素です。ポップ操作の結果、スタックサイズは1つ減少します。
ポップ操作がどのように見えるかを見てみましょう。
すでに2つの要素をプッシュした上記のスタックmystackについて考えてみます。
それでは、関数pop()を呼び出しましょう。この呼び出しが実行されると、スタックの最上位の要素が削除され、「Top」は以下に示すように次の要素を指します。
もう一度pop()を呼び出すと、次の要素(この場合は1)が削除され、スタックが空になります。
ソフトウェア工学におけるライフサイクルモデル
- 上 :スタックの最上位の要素を返します。
- 空の :スタックが空かどうかを確認します。
- サイズ: スタックのサイズ、つまりスタック内の要素の数を返します。
以下に、操作をよりよく理解するためのスタック実装の例を示します。
#include #include using namespace std; void printStack(stack stk) { while (!stk.empty()) { cout << ' ' << stk.top(); stk.pop(); } cout << '
'; } int main () { stack oddstk; oddstk.push(1); oddstk.push(3); oddstk.push(5); oddstk.push(7); oddstk.push(9); cout << 'The stack is : '; printStack(oddstk); cout << '
Size of stack: ' << oddstk.size(); cout << '
Top of stack: ' << oddstk.top(); cout << '
oddstk.pop() : '; oddstk.pop(); printStack(oddstk); cout<<'
Another pop(): '; oddstk.pop(); printStack(oddstk); return 0; }
上記の例は、スタックを生成するプッシュ操作を明確に示しています。また、2回の連続したポップ操作後のスタックも表示されます。
したがって、STLでのスタックとその操作を見てきました。さらに、このチュートリアルでは、「キュー」であるさらに別の単純なSTLコンテナーの詳細な実装を確認します。
キュー
キューはSTLのさらに別のコンテナであり、非常にシンプルで便利です。キューコンテナは、C ++のキューデータ構造のレプリカです。スタックとは異なり、キューコンテナには、前面と背面の2つの端があります。
要素は、キューの前から削除されている間、後のキューに追加されます。一般に、キューはFIFO(先入れ先出し)タイプの配置を使用します。
プログラムにキューコンテナを実装するには、コードにヘッダーを含める必要があります。
#include
キューの宣言の一般的な構文は次のとおりです。
キューqueue_name;
キューコンテナを次のように宣言します。
Queue myqueue;
キュー操作
ここで、キューでサポートされているさまざまな操作を確認します。
- 押す: 関数「push」は、キューの最後、つまりキューの最後に要素を追加します。
- ポップ: 関数「pop」は、キューの最初の要素、つまりキューの先頭にある要素を削除します。
キューのプッシュ機能とポップ機能を理解しましょう。
myqueueの上に宣言された空のキューについて考えてみます。ここで、操作を使用して偶数2をキューにプッシュします。
myqueue.push(2);
これで、キューは次のようになります。
次に、「myqueue.push(4)」を呼び出して「4」をキューに追加します。
オラクルdbaインタビューの質問と回答
これで、キューは次のようになります。
上で見たように、要素は後端または後ろからキューにプッシュされます。
次に、myqueueで操作をポップしましょう。
myqueue.pop();
ご覧のとおり、pop()が呼び出されると、キューの先頭にある要素が削除されます。これは、キューに入る最初の要素がキューから出る最初の要素であることを意味します。
- フロント: この関数は、キューの最初の要素への参照を返します。
- バック: Backは、キューの最後の要素への参照を返します。
- 空の: キューが空かどうかを確認します。
- サイズ: キューのサイズ、つまりキュー内の要素の数を返します。
以下に示すのは、キューコンテナによって使用される操作を示すサンプルプログラムです。
#include #include using namespace std; void printQueue(queue myqueue) { queue secqueue = myqueue; while (!secqueue.empty()) { cout << ' ' << secqueue.front(); secqueue.pop(); } cout << '
'; } int main() { queue myqueue; myqueue.push(2); myqueue.push(4); myqueue.push(6); myqueue.push(8); cout << 'The queue myqueue is : '; printQueue(myqueue); cout << '
myqueue.size() : ' << myqueue.size(); cout << '
myqueue.front() : ' << myqueue.front(); cout << '
myqueue.back() : ' << myqueue.back(); cout << '
myqueue.pop() : '; myqueue.pop(); printQueue(myqueue); return 0; }
出力:
キューmyqueueは:2 4 6 8
myqueue.size():4
myqueue.front():2
myqueue.back():8
myqueue.pop():4 6 8
上に示したように、最初にキューコンテナを宣言します。次に、プッシュ操作を使用して、最初の4つの偶数を追加します。その後、キューから要素をポップし、変更されたキューを表示します。
結論
これで、スタックとキューに関するこのチュートリアルは終了です。すでに述べたように、これらはSTLにある最も単純なコンテナーです。キューコンテナの別のバリエーションは、「優先キュー」として知られています。
今後のチュートリアルでは、STLの優先度キューについて詳しく説明します。
=> ゼロからC ++を学ぶには、ここにアクセスしてください。
推奨読書
- STLの優先キュー
- STLのリスト
- STLのMAPS
- STLで設定
- STLの配列
- イラスト付きのC ++でのデータ構造のキュー
- STLのイテレータ
- イラスト付きC ++の優先キューデータ構造