ダウンロード サンプルプログラム一式 (36.9 KB)
Stack(スタック)
Stackは、Queueと並んで有名な積み上げ型のデータ構造を元にしたコレクションです。Queueとは違い、先に入れたものが後から出てくる構造をしています。Queueが要素の追加や削除にエンキュー、デックという独特の言い回しを使うのと同様、Stackにデータを入れることをプッシュ(Push)、Stackからデータを取り出すことをポップ(Pop)と呼びます。こちらもデータの記憶領域の管理をコレクションに任せられることと、様々な型のデータをまとめて取り扱うことができるという点が便利なところです。
Stackサンプルプログラムの解説
Stack stk = new Stack();
stk.Push("First Object");
stk.Push(2);
stk.Push(3.1415);
Console.WriteLine("Stack size : {0}", stk.Count);
Console.WriteLine("1st Pop : {0}", stk.Pop());
Console.WriteLine("Stack size : {0}", stk.Count);
Console.WriteLine("2nd Pop : {0}", stk.Pop());
Console.WriteLine("Push.");
stk.Push("新しい値を追加");
Console.WriteLine("Stack size : {0}", stk.Count);
Console.WriteLine("3rd Pop : {0}", stk.Pop());
Stack size : 3 1st Pop : 3.1415 Stack size : 2 2nd Pop : 2 Push. Stack size : 2 3rd Pop : 新しい値を追加
特筆して説明する点はありません。先入れ後出し構造であることとメソッド名の違いをのぞけば、その挙動はQueueとほぼ同じです。
Stackの基本的な使い方
Push(value)で値を追加Pop()で値を取り出す
という、Queueとよく似た使い方をします。Queueと同じく、Peekメソッドを使うことで、Stackに積んであるオブジェクトを削除せずに取り出すことが可能です。特定要素へのアクセス方法が提供されていないこと、null参照をPushできること、Stackの要素が底をついた状態でPopするとInvalidOperationException例外を投げることも、Queueと同じです。
Stackを使う上での注意点
Stack特有の注意点としては、Popメソッドのオーダーにあります。Stackの容量がCountの返す値よりも大きければ、PopはO(1)で動作します。しかし、Countの値がStackの容量よりも大きければ、PopはO(n)で動作します。従って、速度を要求される場面ではあらかじめ十分な大きさのStackを確保した方が良いでしょう。他のコレクション同様、コンストラクタで容量の指定が可能です。
まとめ
今回はSystem.Collections名前空間に属する便利なコレクションについて紹介しました。いずれも便利で活用の幅の広いデータ構造ばかりですから、様々な用途に活用していただきたいと思います。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- この記事の著者
-
太田 晃(オオタ アキラ)
ブログ(http://repse.blogspot.com/)では、coLinux上にMinGWを用いてクロスコンパイル環境を構築し、そのうえでSDLやOpenGLを使ってWindows向けのプログラムを書くとか、海外のソフトウェアを(勝手に)日本語化するとか、Windowsのインデックスサービ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
