Skip to content

アルゴリズムから始める C# 入門

C# を使ってアルゴリズムとデータ構造を TDD で学ぶシリーズです。

章構成

第 1 部: 基本

テーマ
第 1 章 基本的なアルゴリズム 3 値の最大値・中央値、条件判定、繰り返し処理、多重ループ
第 2 章 配列 配列の基本操作、基数変換、素数列挙
第 3 章 探索アルゴリズム 線形探索、二分探索、ハッシュ法

第 2 部: データ構造

テーマ
第 4 章 スタックとキュー 固定長スタック、固定長キュー(リングバッファ)
第 5 章 再帰アルゴリズム 階乗、最大公約数、ハノイの塔、8 王妃問題

第 3 部: ソートと文字列

テーマ
第 6 章 ソートアルゴリズム バブル、選択、挿入、シェル、クイック、マージ、ヒープ、度数ソート
第 7 章 文字列処理 ブルートフォース、KMP、Boyer-Moore、文字カウント、回文判定

第 4 部: 高度なデータ構造

テーマ
第 8 章 リスト 単方向連結リスト、双方向連結リスト、配列カーソル版リスト
第 9 章 木構造 二分探索木(挿入、探索、削除、走査)

実装コード

実装コードは apps/csharp/ にあります。

環境

  • .NET: 8.0
  • テストフレームワーク: xUnit
  • Nix devShell: .#dotnet
# テスト実行
nix develop .#dotnet --command bash -c "cd apps/csharp && dotnet test"

C# の特徴

Java 版と比較した主な相違点:

概念 Java C#
スワップ tmp = a; a = b; b = tmp; (a, b) = (b, a);(タプル分解)
ジェネリクス List<T> List<T>(同様)
例外クラス 内部クラス 内部クラス(同様)
コレクション操作 Stream API LINQ
null 安全 Optional nullable 型(T?
プロパティ getter/setter { get; set; }

参考文献

  • 『新・明解 Python で学ぶアルゴリズムとデータ構造』 -- 柴田望洋
  • 『テスト駆動開発』 -- Kent Beck