データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをC#でゼロから実装し、実際に問題を解くのに使います。これを終えると、Stack<T>、Queue<T>、Dictionary<TKey,TValue>は自分で書いたことのある構造になり、それぞれの呼び出しのコストがわかります。開始C#のジェネリックコレクションには、このパスの大部分がすでに入っています。Stack<T>、Queue<T>、Dictionary<TKey,TValue>、LinkedList<T>、SortedSet<T>は、それぞれスタック、キュー、ハッシュテーブル、双方向連結リスト、平衡探索木です。そのひとつひとつをC#で自分で実装し、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン228 チャレンジ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++で教えているため、ステップの後にまとめて載せています。開始専用ページWrite real code, query databases, build websites, and master AI prompts. Our interactive lessons cover every skill modern developers need.
Stay consistent and watch your progress grow! Track your daily coding habit, protect your streak with freeze days, and earn rewards for showing up every day.
12 days streak
Return tomorrow to keep your streak!
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
Double or Nothing
Day 5 of 7
Streak Freeze
2 left
Take your coding journey on the go! No setup, no downloads - just open and start coding. Available on iOS, Android and Web with 4.9 star ratings.
Compete on global leaderboards, invite friends to earn rewards, and celebrate each other's wins. Coding is better with friends!
Read, listen, test yourself, ask the AI, or look up anything you've already covered. Every lesson meets you where you are.
A variable is a named container that stores a value you can reference later in your program.
In Python, you create one by writing the name, an equals sign, then the value you want to store.
The value can change over time - reassigning the name simply points it to a new value.
Earn certificates for every course you complete. Add them to your LinkedIn profile and resume to showcase your coding expertise to employers.
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#コースが無料でそこまで連れて行ってくれます。このパスは、そのコースが終わるところから始まります。