Menu
Coddy logo textTech
学習パス

Swiftのデータ構造とアルゴリズム

Swiftの標準ライブラリにあるのはArrayDictionarySetまでで、キューもヒープも連結リストも木もありません。このパスでは、ノードにはクラスを、逆向きのリンクにはweakを用いて、そのひとつひとつをSwiftで作ります。そうして作った構造を使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。

377 レッスン228 チャレンジ702 クイズの問題

  • 初心者向け
  • sparkles iconAIによるコーディングサポート
  • hint icon実践的なインタラクティブレッスン
  • volume On icon全レッスンに音声ナレーション付き
  • quiz icon知識を確かめるクイズ
  • certificate iconパス全体で23枚の無料修了証

SwiftのDSA、ステップごとに

38 コース377 レッスン228 チャレンジ702 クイズの問題

各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをSwiftで開きます。まだSwiftで教えていない3つのコースは、ステップの後にまとめて載せています。

  1. 1
    このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをSwiftでゼロから実装し、実際に問題を解くのに使います。これを終えると、Arrayがスタックとしては優秀なのにキューとしては遅い理由と、Dictionaryが何をしてくれているかがわかります。開始
  2. 2
    このステップを始める開始双方向連結リスト、ヒープと優先度付きキュー、トライ木、グラフ、そして自己平衡するAVL木。どれも標準ライブラリにはない構造です。weakが真価を発揮するのは双方向連結リストで、ここで書くヒープは、グラフのステップで必要になるものです。開始
  3. 3
    このステップを始める開始バブル、選択、挿入、マージ、クイック、ヒープ、計数、基数ソートを、Swiftで書き、可視化ツールで眺めます。sorted(by:){ $0 > $1 }のようなクロージャを受け取ります。このステップを終えれば、その呼び出しの向こう側にあるアルゴリズムを自分で書けます。開始
  4. 4
    このステップを始める開始Swiftでの再帰のチャレンジ問題。再帰は、自分自身を含むことが許された型であるindirect enumと自然に組み合わさります。またSwiftは末尾呼び出し最適化を約束していないので、十分に深い再帰は、いつまでも走り続けるのではなく、スタックオーバーフローでクラッシュします。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページ
  5. 5
    このステップを始める開始幅優先探索と深さ優先探索、ダイクストラ法、ベルマン・フォード法、トポロジカルソート、クラスカル法とプリム法を、ステップ2で作ったグラフの上でSwiftで学びます。標準ライブラリには優先度付きキューがないので、ダイクストラ法に必要なのはステップ2のヒープです。開始
  6. 6
    このステップを始める開始10本の面接チャレンジパックと2つのコーディング問題集をSwiftで。初見の問題を、テストケースで採点されながら、解説なしで解きます。値型と参照は、もう意図して選べるはずです。途中でSwiftのルールをひとつ気に留めておきましょう。算術演算のオーバーフローは実行時にトラップするので、ラップアラウンドに頼るコードでは&+&-&*を使います。開始
使える機能
コーディングを学ぶために使うすべて

Learn by Doing

Write real code, query databases, build websites, and master AI prompts. Our interactive lessons cover every skill modern developers need.

playground.js
Code Editor
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Test #1test Case Success icon
Test #2test Case Success icon
Test #3test Case Failure icon
Input
"Alex"
Output
"Hello, Coddy! Alex"

Build Your Coding Streak

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!

fire Filled icon
left icon

January 2026

right icon

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

product Double Or Nothing icon

Double or Nothing

Day 5 of 7

fire Freeze icon

Streak Freeze

2 left

Code Anywhere, Anytime

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.

Python
7Streak
250Score
5Energy
Variables
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
CONTINUE
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
Journey
Goals
Leaderboard
Profile
4.9
StarStarStarStarStar
Rating

You're Not Alone in This

Compete on global leaderboards, invite friends to earn rewards, and celebrate each other's wins. Coding is better with friends!

Challenger League
Challenger LeagueTop 7 advance
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up iconPromotion zoneleaderboard Arrow Up icon

Every way to learn

Read, listen, test yourself, ask the AI, or look up anything you've already covered. Every lesson meets you where you are.

Intro to Variables
Audio

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.

1xSarah

Prove Your Skills

Earn certificates for every course you complete. Add them to your LinkedIn profile and resume to showcase your coding expertise to employers.

CoddyCertificate of Completion
This certifies thatJohn Doehas successfully completed
python iconPython Fundamentals
Verified
DateJan 2026
LinkedInAdd to LinkedIn

SwiftのDSAをCoddyで学ぶ理由

  • Swiftにない構造を。標準ライブラリにはキュー、両端キュー、ヒープ、連結リスト、木がないので、それらが必要なSwiftの面接問題では、自分で書くことが求められます。このパスでは実際にそれらを書き、グラフと面接のコースで使います。一度書いてしまえば、DequeHeapを含むAppleのオープンソースのswift-collectionsパッケージも違って見えてきます。
  • 値型と参照を、具体的に。ArrayDictionarySetはコピーオンライトの値型なので、誰かが変更するまでは受け渡しのコストが小さく済みます。木のノードはそうはいきません。クラスかindirect enumでなければならず、親へのポインタはweakにしなければ、ARCが循環参照を解放してくれません。Swiftのメモリモデルが理論でなくなるのは、データ構造を書くときです。
  • パスのほぼすべてをSwiftで。データ構造、ソート、グラフアルゴリズム、再帰のチャレンジ、面接パックは、すべてSwiftで教えています。別の言語で教える3つのコースは、それぞれへのリンクとともにステップの後にまとめて載せています。動的計画法とPython面接シリーズ(Python)、そしてビット演算(C++)です。ビット演算はSwiftからも楽に読めます。SwiftはC++の&|^~<<>>を共有しているからです。
  • 面接と同じ形で採点。どのレッスンもテストケースで確認されるSwiftのチャレンジで終わり、失敗したときはBugsyがあなたのコードを読み、答えを教えずに修正の方向へ導きます。ほとんどのコースで無料の修了証が発行され、それぞれ専用URLで検証できます。

SwiftでのDSA学習についてよくある質問

Swiftはデータ構造とアルゴリズムの学習に向いていますか?

はい。ジェネリクス、ComparableHashableのようなプロトコル、そしてオプショナルによって、nextnilかもしれないノードであることが型に明示され、コンパイラがすべての使用箇所をチェックします。早めに知っておきたいことが2つあります。標準ライブラリが薄いので、キューやヒープは自分で書くこと。そしてコレクションは値なので、配列を新しい変数に代入して変更しても元の配列はそのままであることです。これはJavaやJavaScriptから来た人を驚かせます。

Swiftのどの型が、どのデータ構造にあたりますか?

Arrayは動的配列で、appendpopLast()を使えばスタックにもなります。DictionarySetはハッシュテーブルです。標準ライブラリにあるのはこれで全部です。Appleのオープンソースのswift-collectionsパッケージがDequeHeapOrderedSetOrderedDictionaryを加えてくれますが、連結リスト、木、トライ木、グラフはステップ1と2で自分で書きます。

Swiftでは、なぜ木のノードはクラスでなければならないのですか?

構造体は値だからです。構造体は、たとえオプショナルであっても自分自身の型のストアドプロパティを持てず、配列の中のようにコピーが保持される場所では、コピーを変更しても元はそのままです。クラスのインスタンスは参照なので、ノード同士が互いを指せます。その場で変更することのない木なら、indirect enumでも構いません。注意点はARCです。親へのポインタをweakにしないと、親と子が互いを生かし続け、木はいつまでも解放されません。

Swiftで高速なキューを書くにはどうすればよいですか?

まず、removeFirst()は使わないことです。Arrayに対して使うと残りのすべての要素がずれるので、デキューのたびにO(n)かかります。先頭のインデックスを持って進めていくか、2つの配列を使います。受け取り用の配列にプッシュし、取り出し用の配列からポップし、取り出し用が空になったら受け取り用を逆順にして補充します。どちらの方法でも、デキューは償却O(1)になります。swift-collectionsのDequeはこれを代わりにやってくれますが、ステップ1ではキューを自分で作ります。

このパスで、Swiftで教えていないコースはどれですか?

3つです。動的計画法とPython面接シリーズはPythonで、ビット演算はC++で教えています。これらはステップの後にまとめて載せてあり、それぞれのリンクからその言語でコースを開けます。Swiftならメモは配列かDictionaryです。またSwiftの整数型にはnonzeroBitCounttrailingZeroBitCountがあり、C++のビットのテクニックが手作業でやることを、プロパティひとつでこなします。

このパスを始める前に、Swiftを知っている必要がありますか?

少なくとも、構造体、クラス、オプショナル、ジェネリクス、プロトコルは必要です。初めて見るものがあれば、まずCoddyのSwiftコースが無料でそれらを扱います。このパスは、そのコースが終わるところから始まります。

他の学習パス

同じコースを別の職種向けに並べたものです。進捗は引き継がれ、あるパスで修了したコースは、それを含むすべてのパスで修了扱いになります。

すべての学習パス
Coddy programming languages illustration

データ構造とアルゴリズムパスを無料で始める

学習を始める