データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをSwiftでゼロから実装し、実際に問題を解くのに使います。これを終えると、Arrayがスタックとしては優秀なのにキューとしては遅い理由と、Dictionaryが何をしてくれているかがわかります。開始Swiftの標準ライブラリにあるのはArray、Dictionary、Setまでで、キューもヒープも連結リストも木もありません。このパスでは、ノードにはクラスを、逆向きのリンクにはweakを用いて、そのひとつひとつをSwiftで作ります。そうして作った構造を使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン284 チャレンジ702 クイズの問題
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをSwiftで開きます。まだSwiftで教えていない3つのコースは、ステップの後にまとめて載せています。
Arrayがスタックとしては優秀なのにキューとしては遅い理由と、Dictionaryが何をしてくれているかがわかります。開始weakが真価を発揮するのは双方向連結リストで、ここで書くヒープは、グラフのステップで必要になるものです。開始sorted(by:)は{ $0 > $1 }のようなクロージャを受け取ります。このステップを終えれば、その呼び出しの向こう側にあるアルゴリズムを自分で書けます。開始indirect enumと自然に組み合わさります。またSwiftは末尾呼び出し最適化を約束していないので、十分に深い再帰は、いつまでも走り続けるのではなく、スタックオーバーフローでクラッシュします。動的計画法とビット演算は、それぞれ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プロフィールや履歴書に追加して、雇用主にプログラミングスキルをアピールしましょう。
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++のビットのテクニックが手作業でやることを、プロパティひとつでこなします。