データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをC#でゼロから実装し、実際に問題を解くのに使います。これを終えると、Stack<T>、Queue<T>、Dictionary<TKey,TValue>は自分で書いたことのある構造になり、それぞれの呼び出しのコストがわかります。開始C#のジェネリックコレクションには、このパスの大部分がすでに入っています。Stack<T>、Queue<T>、Dictionary<TKey,TValue>、LinkedList<T>、SortedSet<T>は、それぞれスタック、キュー、ハッシュテーブル、双方向連結リスト、平衡探索木です。そのひとつひとつをC#で自分で実装し、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン284 チャレンジ702 クイズの問題
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをC#で開きます。まだC#で教えていない3つのコースは、ステップの後にまとめて載せています。
Stack<T>、Queue<T>、Dictionary<TKey,TValue>は自分で書いたことのある構造になり、それぞれの呼び出しのコストがわかります。開始LinkedList<T>という既製品があります。このステップを終えると、SortedSet<T>は仕組みのわかる平衡木になり(あなたのものがAVL木なのに対し、あちらは赤黒木です)、ヒープはどの.NETのバージョンでも自分で書けるものになります。開始Array.SortとList<T>.Sortはイントロソート(ヒープソートと挿入ソートで補強したクイックソート)で安定ではなく、一方LINQのOrderByは安定です。その理由は、このステップを終えればわかります。開始StackOverflowExceptionで終わり、この例外はキャッチできません。だから再帰メソッドには、何よりも先に抜け出す道が必要です。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページ実際のコードを書き、データベースをクエリし、ウェブサイトを構築し、AIプロンプトをマスターしましょう。インタラクティブなレッスンで現代の開発者に必要なすべてのスキルを網羅しています。
継続して進捗を見守りましょう!毎日のコーディング習慣を追跡し、フリーズ日で連続記録を守り、毎日参加することで報酬を獲得しましょう。
12 日連続
明日も戻ってきて連続記録を維持しましょう!
January 2026
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21
22
23
24
25
26
27
28
29
30
ダブル・オア・ナッシング
7日中5日目
連続記録フリーズ
2 left
コーディングの旅を持ち歩こう!セットアップ不要、ダウンロード不要 - 開いてすぐにコーディング開始。iOS、Android、Webで4.9星評価で利用可能。
グローバルリーダーボードで競い、友達を招待して報酬を獲得し、お互いの成功を祝いましょう。プログラミングは友達と一緒の方が楽しい!
読む・聴く・自分を試す・AIに聞く・学んだことを調べる。どんな学び方にも対応したレッスンです。
変数は、後でプログラム内で参照できる値を格納する、名前のついた入れ物です。
Pythonでは、名前、イコール記号、格納したい値の順で書くことで作成します。
値は後から変えられます。再代入すると、名前は新しい値を指すようになります。
完了したすべてのコースで証明書を獲得しましょう。LinkedInプロフィールや履歴書に追加して、雇用主にプログラミングスキルをアピールしましょう。
List<T>は動的配列なので、Insert(0, x)はその後ろのすべての要素をずらします。Dictionary<TKey,TValue>はハッシュテーブルで、平均で定数時間ですが、その性能はキーのGetHashCodeの質しだいです。構造を自分で作ることで、こうした事実は雑学ではなくなり、どのコレクションを選ぶかを決める判断材料になります。System.Collections.Genericがこのパスの構造の大半をカバーしています。早めに身につけたい習慣が2つあります。LINQは簡潔ですが、OrderByはどれもソートで、Whereはどれもループなので、あなたが数えられるようになろうとしているコストを隠してしまいます。そしてArray.Sortは安定ではないので、等しいキーの順序を保つ必要があるときには、それが問題になります。List<T>は動的配列、Stack<T>とQueue<T>は配列ベース、LinkedList<T>は双方向連結リスト、Dictionary<TKey,TValue>とHashSet<T>はハッシュテーブル、SortedDictionary<TKey,TValue>とSortedSet<T>は赤黒木で、ステップ2で作るAVL木と同じく平衡木です。SortedList<TKey,TValue>はキーの順に保たれた2つの配列の組で、.NET 6以降のPriorityQueue<TElement,TPriority>は配列ベースの最小ヒープです。トライ木やグラフのクラスはないので、それらは自分で書きます。structは値型なので、自分自身の型のフィールドをそもそも持てず、コピーされた先で変更しても元には影響しません。クラスのインスタンスは参照なので、連結リストや木に必要なかたちでノード同士が互いを指せます。構造体は、グリッドの座標や重み付きの辺のような小さな値のために取っておきましょう。PriorityQueue<TElement,TPriority>で、各要素がそれぞれの優先度とともにエンキューされる、配列ベースの最小ヒープです。順序を逆にするIComparer<TPriority>を渡せば最大ヒープになります。.NET Frameworkや古いランタイムにはないため、C#の開発者は長いあいだヒープを自作するか、SortedSet<T>を無理やりヒープ代わりに使ってきました。自分で書けることが今も大切なのはそのためで、それをするのがステップ2です。Dictionaryで、ビットのテクニックもきれいに移植でき、C++が設けている区別までそのまま同じです。>>はintでは符号を保ち、uintではゼロで埋めます。List<T>のようなジェネリックコレクションは必要です。初めて見るものがあれば、まずCoddyのC#コースが無料でそこまで連れて行ってくれます。このパスは、そのコースが終わるところから始まります。