Skip to content

Latest commit

 

History

History
97 lines (80 loc) · 2.34 KB

README.md

File metadata and controls

97 lines (80 loc) · 2.34 KB

スタック構造

C#でスタック( Stack )構造を実装するサンプルプログラムを作成します。スタックは「後入れ先出し」( LIFO: Last In, First Out )のデータ構造です。この例では、自作のスタックを実装し、それに要素をプッシュ( Push )し、ポップ( Pop )する方法を示します。

以下は、そのようなスタックを実装する簡単な例です:

using System;

public class Stack<T>
{
	private Node? top;

	private class Node
	{
		public T Data;
		public Node? Next;

		public Node(T data)
		{
			Data = data;
			Next = null;
		}
	}

	public Stack()
	{
		top = null;
	}

	public bool IsEmpty()
	{
		return top == null;
	}

	public void Push(T item)
	{
		Node newNode = new Node(item)
		{
			Next = top
		};
		top = newNode;
	}

	public T? Pop()
	{
		if (IsEmpty())
		{
			throw new InvalidOperationException("Stack is empty");
		}
		if (top == null)
		{
			throw new InvalidOperationException("Stack is empty");
		}
		T? item = top.Data;
		top = top.Next;
		return item;
	}

	public T? Peek()
	{
		if (IsEmpty())
		{
			throw new InvalidOperationException("Stack is empty");
		}
		if (top == null)
		{
			throw new InvalidOperationException("Stack is empty");
		}
		return top.Data;
	}
}

class Program
{
	static void Main(string[] args)
	{
		Stack<int> stack = new Stack<int>();

		// 要素の追加
		stack.Push(1);
		stack.Push(2);
		stack.Push(3);

		// 先頭の要素を参照
		Console.WriteLine("Peek: " + stack.Peek());

		// 要素の取り出し
		Console.WriteLine("Pop: " + stack.Pop());
		Console.WriteLine("Pop: " + stack.Pop());
	}
}

このプログラムでは、ジェネリック型の Stack クラスを定義しています。内部では、連結リストを使用してスタックの要素を管理しています。Push メソッドはスタックのトップに要素を追加し、Pop メソッドはスタックのトップから要素を取り出し、Peek メソッドはスタックのトップの要素を参照するために使います。

このコードを実行すると、スタックに要素が追加され、その後、順番に要素が取り出され、最後にスタックのトップの要素が表示されます。