データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをSwiftでゼロから実装し、実際に問題を解くのに使います。これを終えると、Arrayがスタックとしては優秀なのにキューとしては遅い理由と、Dictionaryが何をしてくれているかがわかります。開始Swiftの標準ライブラリにあるのはArray、Dictionary、Setまでで、キューもヒープも連結リストも木もありません。このパスでは、ノードにはクラスを、逆向きのリンクにはweakを用いて、そのひとつひとつをSwiftで作ります。そうして作った構造を使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン228 チャレンジ702 クイズの問題
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをSwiftで開きます。まだSwiftで教えていない3つのコースは、ステップの後にまとめて載せています。
Arrayがスタックとしては優秀なのにキューとしては遅い理由と、Dictionaryが何をしてくれているかがわかります。開始weakが真価を発揮するのは双方向連結リストで、ここで書くヒープは、グラフのステップで必要になるものです。開始sorted(by:)は{ $0 > $1 }のようなクロージャを受け取ります。このステップを終えれば、その呼び出しの向こう側にあるアルゴリズムを自分で書けます。開始indirect enumと自然に組み合わさります。またSwiftは末尾呼び出し最適化を約束していないので、十分に深い再帰は、いつまでも走り続けるのではなく、スタックオーバーフローでクラッシュします。動的計画法とビット演算は、それぞれ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.
DequeやHeapを含むAppleのオープンソースのswift-collectionsパッケージも違って見えてきます。Array、Dictionary、Setはコピーオンライトの値型なので、誰かが変更するまでは受け渡しのコストが小さく済みます。木のノードはそうはいきません。クラスかindirect enumでなければならず、親へのポインタはweakにしなければ、ARCが循環参照を解放してくれません。Swiftのメモリモデルが理論でなくなるのは、データ構造を書くときです。&、|、^、~、<<、>>を共有しているからです。ComparableやHashableのようなプロトコル、そしてオプショナルによって、nextがnilかもしれないノードであることが型に明示され、コンパイラがすべての使用箇所をチェックします。早めに知っておきたいことが2つあります。標準ライブラリが薄いので、キューやヒープは自分で書くこと。そしてコレクションは値なので、配列を新しい変数に代入して変更しても元の配列はそのままであることです。これはJavaやJavaScriptから来た人を驚かせます。Arrayは動的配列で、appendとpopLast()を使えばスタックにもなります。DictionaryとSetはハッシュテーブルです。標準ライブラリにあるのはこれで全部です。Appleのオープンソースのswift-collectionsパッケージがDeque、Heap、OrderedSet、OrderedDictionaryを加えてくれますが、連結リスト、木、トライ木、グラフはステップ1と2で自分で書きます。indirect enumでも構いません。注意点はARCです。親へのポインタをweakにしないと、親と子が互いを生かし続け、木はいつまでも解放されません。removeFirst()は使わないことです。Arrayに対して使うと残りのすべての要素がずれるので、デキューのたびにO(n)かかります。先頭のインデックスを持って進めていくか、2つの配列を使います。受け取り用の配列にプッシュし、取り出し用の配列からポップし、取り出し用が空になったら受け取り用を逆順にして補充します。どちらの方法でも、デキューは償却O(1)になります。swift-collectionsのDequeはこれを代わりにやってくれますが、ステップ1ではキューを自分で作ります。Dictionaryです。またSwiftの整数型にはnonzeroBitCountとtrailingZeroBitCountがあり、C++のビットのテクニックが手作業でやることを、プロパティひとつでこなします。