カテゴリ: VB.NET 更新日: 2026/01/29

VB.NETのStack(スタック)を完全解説!LIFO処理の基本と使い方

VB.NETのスタック(Stack(Of T))の使い方とLIFO処理
VB.NETのスタック(Stack(Of T))の使い方とLIFO処理

先生と生徒の会話形式で理解しよう

生徒

「VB.NETで、積み上げた本のように『最後に置いたものから順に取る』仕組みは作れますか?」

先生

「それは『Stack(スタック)』という仕組みを使えば簡単に実現できますよ。」

生徒

「スタック……。前回のキューとは逆の動きをするということでしょうか?」

先生

「その通り!『後入れ先出し』というルールですね。具体的なプログラムの書き方を見ていきましょう!」

1. Stack(スタック)とは?「後入れ先出し」の仕組み

1. Stack(スタック)とは?「後入れ先出し」の仕組み
1. Stack(スタック)とは?「後入れ先出し」の仕組み

VB.NETのStack(スタック)とは、データを一列に並べて管理する「コレクション」の一種です。最大の特徴は、LIFO(ライフォ)という仕組みで動くことです。LIFOは「Last In, First Out」の略で、日本語では「後入れ先出し」と言います。

プログラミング未経験の方に一番わかりやすい例えは、机の上に積み上げられた「本」や「お皿」です。新しいものを上に積み上げると、最初に取り出すことができるのは、一番最後に乗せた一番上のものですよね。一番下にあるもの(最初に入れたもの)を取り出すには、上のものをすべてどかさなければなりません。このように、データの追加と取り出し口が同じ場所にあるのがスタックの構造です。

2. データを積む操作:Push(プッシュ)

2. データを積む操作:Push(プッシュ)
2. データを積む操作:Push(プッシュ)

スタックに新しいデータを追加することを、専門用語でPush(プッシュ)と呼びます。本を積み上げる動作そのものを指す言葉だと思ってください。

VB.NETでスタックを使うときは、Stack(Of 型名)という書き方をして準備(インスタンス化)します。ここでは、閲覧したページの履歴を管理するようなイメージで、文字列(String型)のスタックを作ってみましょう。パソコンの操作に慣れていない方でも、この「追加はPush」という合言葉を覚えれば大丈夫です。


' 文字列を入れるためのスタックを新しく作る
Dim history As New Stack(Of String)()

' データを積み上げる(Push)
history.Push("ホーム画面")
history.Push("商品検索ページ")
history.Push("商品詳細ページ")

Console.WriteLine("ページ履歴を保存しました。")

これで、スタックの一番上には最後にPushした「商品詳細ページ」が置かれている状態になります。データを追加するたびに、古いデータはどんどん下の方へと追いやられていきます。

3. データを取り出す操作:Pop(ポップ)

3. データを取り出す操作:Pop(ポップ)
3. データを取り出す操作:Pop(ポップ)

スタックの一番上にあるデータを取り出し、同時にスタックから削除する操作をPop(ポップ)と言います。積み上げた本の一番上を手に取るイメージです。

Popを使うと、最後にPushしたデータが返ってきます。ブラウザの「戻る」ボタンを押したときに、直前に見ていたページに戻るような仕組みを想像するとわかりやすいでしょう。一度Popしたデータはスタックの中からは消えてしまうため、取り扱いには注意が必要です。


' 一番上のデータを取り出して削除する(Pop)
Dim lastPage As String = history.Pop()

Console.WriteLine("戻るボタンで移動した先: " & lastPage)
Console.WriteLine("スタックに残っている数: " & history.Count)

戻るボタンで移動した先: 商品詳細ページ
スタックに残っている数: 2

最後にPushした「商品詳細ページ」が最初に出てきましたね。これが「後入れ先出し」の動きです。

4. 一番上をこっそり確認:Peek(ピーク)

4. 一番上をこっそり確認:Peek(ピーク)
4. 一番上をこっそり確認:Peek(ピーク)

「一番上のデータは何かな?」と確認したいけれど、まだ取り出して消したくない……という時もありますよね。そんな時に便利なのがPeek(ピーク)メソッドです。Peekには「そっと覗く」という意味があります。

Peekを使えば、スタックの中身の順番や数を変えずに、現在のトップにあるデータの中身だけを知ることができます。次に何を取り出すかを確認して、条件分岐(if文など)で処理を分けたい時によく使われます。未経験の方でも、この「覗き見」を活用することで、エラーの少ない安全なプログラムを書けるようになります。


' 一番上のデータを覗き見する(削除はしない)
Dim topItem As String = history.Peek()

Console.WriteLine("現在の一番上にあるデータ: " & topItem)
Console.WriteLine("スタックの数は変わりません: " & history.Count)

現在の一番上にあるデータ: 商品検索ページ
スタックの数は変わりません: 2

5. 実務での使いどころ:スタックはどんな時に使う?

5. 実務での使いどころ:スタックはどんな時に使う?
5. 実務での使いどころ:スタックはどんな時に使う?

「わざわざ不便に後から入れたものから出す必要なんてあるの?」と思うかもしれません。しかし、プログラミングの実務では、このスタックの仕組みは「神様」のように重宝される場面があります。

  • 「元に戻す(Undo)」機能: 文章作成ソフトなどで、操作を一つずつ戻す機能はスタックで管理されています。最新の操作をPopして捨てれば、一つ前の状態に戻れます。
  • 式の計算(カッコの解析): 数学の式の「( )」が正しく閉じられているかチェックする際、開きカッコをスタックに積み、閉じカッコが来たらPopするという手法が使われます。
  • 迷路の探索: 分かれ道に来たときに道をスタックに保存しておき、行き止まりになったらスタックから最新の地点をPopして戻る「バックトラック」という手法で使われます。

このように、「来た道を戻る」「最新の状態を優先する」といった処理において、スタックは欠かせない存在なのです。

6. 注意!空のスタックから取り出そうとすると?

6. 注意!空のスタックから取り出そうとすると?
6. 注意!空のスタックから取り出そうとすると?

ここで初心者が陥りやすい例外(エラー)についてお話しします。中身が空っぽのスタックに対して、PopやPeekを実行しようとすると、プログラムは「取り出すものがありません!」と怒って止まってしまいます。

これを防ぐためには、操作をする前に必ずスタックのCount(カウント)プロパティを確認しましょう。Countが0より大きい時だけ操作するようにif文で囲むのが、プロのプログラマーへの第一歩です。安全第一でコードを書く癖をつけていきましょう。


' 空っぽかどうかチェックしてから取り出す
If history.Count > 0 Then
    Dim page As String = history.Pop()
    Console.WriteLine(page & " を取り出しました。")
Else
    Console.WriteLine("履歴はありません。")
End If

7. StackとQueueの決定的な違い

7. StackとQueueの決定的な違い
7. StackとQueueの決定的な違い

よく似たコレクションに「Queue(キュー)」がありますが、改めて違いを整理しましょう。プログラミングにおいて、この使い分けができるようになることは非常に重要です。

特徴 Stack(スタック) Queue(キュー)
処理ルール LIFO(後入れ先出し) FIFO(先入れ先出し)
例え 積み上げた本、お皿 レジの行列、チケット売り場
追加の命令 Push(プッシュ) Enqueue(エンキュー)
削除の命令 Pop(ポップ) Dequeue(デキュー)

「後から来たものを先に処理するのがスタック」「先に来た人を優先するのがキュー」です。この違いをマスターすれば、VB.NETのデータ管理はぐっと楽になります。自分の作りたい機能がどちらのルールに適しているか、じっくり考えて選んでみてくださいね!

カテゴリの一覧へ
新着記事
New1
ASP.NET
ASP.NET Blazor入門!C#で作る最新のWebアプリ開発
New2
VB.NET
VB.NETのStack(スタック)を完全解説!LIFO処理の基本と使い方
New3
VB.NET
VB.NETのキュー(Queue)を完全解説!初心者でもわかるFIFO処理と使い方
New4
VB.NET
VB.NETのNullable型を徹底解説!初心者でもわかる使い方と注意点
人気記事
No.1
Java&Spring記事人気No1
VB.NET
VB.NETの配列(Array)を完全マスター!初心者でも基礎からわかる宣言・初期化ガイド
No.2
Java&Spring記事人気No2
ASP.NET
ASP.NET Coreを.NET CLIで作成する方法を完全解説!初心者でも迷わないコマンド操作入門
No.3
Java&Spring記事人気No3
VB.NET
VB.NETの例外処理で初心者がつまずくポイントと解決策!エラー対策を完全攻略
No.4
Java&Spring記事人気No4
VB.NET
VB.NETのコーディング規約を完全解説!初心者でもわかる読みやすいコードの基本ルール
No.5
Java&Spring記事人気No5
VB.NET
VB.NETでアプリケーション全体の例外をキャッチする方法を完全ガイド
No.6
Java&Spring記事人気No6
ASP.NET
Razor Pagesとは?MVCとの違いをやさしく理解しよう【ASP.NET初心者向け】
No.7
Java&Spring記事人気No7
VB.NET
VB.NETのDictionaryを完全ガイド!初心者でもわかる辞書の基本と応用
No.8
Java&Spring記事人気No8
VB.NET
VB.NETの動的配列とReDimの使い方を徹底解説!サイズ変更のコツ