C#でのスタック(Stack)クラスの実装と使い方
C#のStackクラスは、LIFO(Last-In, First-Out:後入れ先出し)方式でオブジェクトを管理するコレクションです。最後に追加した要素が最初に取り出されるという特性を持つため、履歴管理や「元に戻す(Undo)」機能など、さまざまな場面で活用されています。
Stackクラスは、Pushメソッドで要素を追加し、Popメソッドで要素を取り出すという基本操作で実装されます。主なメソッドは以下の通りです。
| 番号 | メソッドと説明 |
|---|---|
| 1 | public virtual void Clear(); スタックからすべての要素を削除します。 |
| 2 | public virtual bool Contains(object obj); 指定した要素がスタック内に存在するかどうかを判定します。 |
| 3 | public virtual object Peek(); スタックの先頭にあるオブジェクトを、削除せずに返します。 |
| 4 | public virtual object Pop(); スタックの先頭にあるオブジェクトを削除して返します。 |
| 5 | public virtual void Push(object obj); スタックの先頭にオブジェクトを挿入します。 |
| 6 | public virtual object[] ToArray(); スタックの内容を新しい配列にコピーします。 |
Push操作:要素の追加
Pushメソッドは、スタックの先頭に新しい要素を追加します。追加した順に積み上げられていくイメージです。
Stack st = new Stack();
st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D');Pop操作:要素の取り出し
Popメソッドは、スタックの先頭から要素を取り除き、その値を返します。LIFO構造により、最後にPushした要素が最初に取り出されます。
サンプルコード
以下は、StackクラスとそのPush()・Pop()メソッドの基本的な使い方を示す例です。
using System;
using System.Collections;
namespace CollectionsApplication {
class Program {
static void Main(string[] args) {
Stack st = new Stack();
st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D');
Console.WriteLine("Current stack: ");
foreach (char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
st.Push('P');
st.Push('Q');
Console.WriteLine("The next poppable value in stack: {0}", st.Peek());
Console.WriteLine("Current stack: ");
foreach (char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("Removing values....");
st.Pop();
st.Pop();
st.Pop();
Console.WriteLine("Current stack: ");
foreach (char c in st) {
Console.Write(c + " ");
}
}
}
}実行結果
Current stack: D C B A The next poppable value in stack: Q Current stack: Q P D C B A Removing values.... Current stack: C B A
補足:ジェネリック版のStack<T>
上記のSystem.Collections.Stackは非ジェネリック版で、要素はobject型として扱われるため、取り出し時にキャストが必要になります。実際の開発では、型安全なSystem.Collections.Generic.Stack<T>を使用することが推奨されています。基本的なPush・Pop・Peekなどの操作方法は同じです。
-
C言語におけるスタックを使った後置記法(逆ポーランド記法)の式評価を解説
スタック(Stack)は線形データ構造の一種で、データの挿入と削除が必ず一端(トップ)からのみ行われるという特徴を持ちます。この「後入れ先出し(LIFO: Last In First Out)」の性質により、式の評価や構文解析など、さまざまな場面で活用されています。 基本アルゴリズム Push(挿入)のアルゴリズム まず、スタックオーバーフローが発生していないかを確認します。 if (top == n-1) printf(stack over flow); オーバーフローしていない場合は、要素をスタックに挿入します。 top++ a[top] = item Pop(削除)のアルゴリズ
-
C言語で学ぶスタックによる式の変換:中置記法から後置・前置記法への変換アルゴリズム
スタック(Stack)とは、データの挿入と削除が同じ一端のみで行われる線形データ構造です。この性質を「LIFO(Last In First Out:後入れ先出し)」と呼びます。スタックの基本操作とアルゴリズムPush(プッシュ)のアルゴリズムまず、スタックオーバーフローが発生していないかを確認します。if (top == n-1) printf(stack over flow);オーバーフローでなければ、要素をスタックに挿入します。top++; a[top] = item;Pop(ポップ)のアルゴリズムまず、スタックアンダーフローが発生していないかを確認します。if (top == -