Menu
Coddy logo textTech
学習パス

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

Rustの標準ライブラリには構造の大半(VecVecDequeHashMapBTreeMapBinaryHeap)がそろっており、自分で書く構造には借用チェッカーが口を出してきます。単方向連結リストはOption<Box<Node>>で、親へのリンクを持つ木にはRcRefCellWeakが必要です。このパスでは、そのひとつひとつをRustで作り、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。

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

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

RustのDSA、ステップごとに

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

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

  1. 1
    このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをRustでゼロから実装し、実際に問題を解くのに使います。Rustでは次のノードを所有するノードはOption<Box<Node>>なので、所有権が自然に感じられ始めるのはここです。これを終えると、VecVecDequeHashMapが何をしてくれているかがわかります。開始
  2. 2
    このステップを始める開始双方向連結リスト、ヒープと優先度付きキュー、トライ木、グラフ、そして自己平衡するAVL木。どのノードにも2本のリンクが向かうので、Rustでは双方向連結リストが難関です。このステップを終えると、BinaryHeapはデフォルトで最大値から出てくる、自分で書いたことのあるヒープになり、BTreeMapは仕組みのわかる順序付きの木になります。開始
  3. 3
    このステップを始める開始バブル、選択、挿入、マージ、クイック、ヒープ、計数、基数ソートを、Rustで書き、可視化ツールで眺めます。sortは安定で、sort_unstableはたいていそれより高速です。このステップを終えれば、安定性にどんなコストがかかり、いつそれを手放すべきかを説明できます。開始
  4. 4
    このステップを始める開始Rustでの再帰のチャレンジ問題。再帰的な型は、Boxを挟まないとコンパイラがサイズを決めてくれません。そしてその型に対する再帰関数は、SomeNoneかの各ケースにマッチし、それがそのままベースケースと再帰ケースの分かれ目になります。Rustは末尾呼び出し最適化を約束していないので、十分に深い再帰はスタックをあふれさせ、プログラムを異常終了させます。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページ
  5. 5
    このステップを始める開始幅優先探索と深さ優先探索、ダイクストラ法、ベルマン・フォード法、トポロジカルソート、クラスカル法とプリム法を、ステップ2で作ったグラフの上でRustで学びます。Rustでのダイクストラ法の優先度付きキューはReverse((distance, node))を入れたBinaryHeap、つまり最小ヒープに変えたステップ2のヒープです。開始
  6. 6
使える機能
コーディングを学ぶために使うすべて

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

RustのDSAをCoddyで学ぶ理由

  • 所有権を、いちばん難しい場所で。連結リストと木は、Rustのルールが最初に牙をむく場所です。どの値にも所有者は1人だけなのに、これらの構造は互いを指し合うノードを必要とします。それらを書くことで、BoxOption::takeRc<RefCell<T>>Weakは単なる構文ではなく設計判断になります。この言語の有名な解説に『Learning Rust With Entirely Too Many Linked Lists』という題名が付いているのは、そのためです。
  • コストのはっきりしたコレクション。Vec<T>はスタック、VecDeque<T>はリングバッファでキュー、HashMapは意図的な衝突に備えてシードが設定されたハッシュテーブル、BTreeMapは順序付きのB木、BinaryHeap<T>は最大ヒープです。一度構造を自分で作れば、問題がどれを求めているのか、そしてダイクストラ法がなぜ要素をReverseで包むのかがわかります。
  • パスのほぼすべてをRustで。データ構造、ソート、グラフアルゴリズム、再帰のチャレンジ、面接パックは、すべてRustで教えています。別の言語で教える3つのコースは、それぞれへのリンクとともにステップの後にまとめて載せています。動的計画法とPython面接シリーズ(Python)、そしてビット演算(C++)です。ビット演算は、書き方をひとつ変えるだけでそのまま通用します。RustではNOTを!xと書き、立っているビットはcount_ones()で数えます。
  • 面接と同じ形で採点。どのレッスンもテストケースで確認されるRustのチャレンジで終わり、失敗したときやコンパイルが通らないときはBugsyがあなたのコードを読み、答えを教えずに修正の方向へ導きます。ほとんどのコースで無料の修了証が発行され、それぞれ専用URLで検証できます。

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

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

使う側としては、とても向いています。標準のコレクションは高速でドキュメントも充実しており、sortは安定で、安全なRustはガベージコレクタなしで、ダングリングポインタとデータ競合をコンパイル時に排除します。ポインタでつなぐ構造を書く側としては、CやJavaより難しくなります。RcRefCellをあえて使わない限り、所有権が共有された可変のリンクを許さないからで、双方向連結リストや親ポインタを持つ木は、まさにそうしたリンクでできています。その難しさこそが学びでもあります。Rustでそれらを書けるようになれば、何を誰が所有しているのかが正確にわかります。

Rustのどのコレクションが、どのデータ構造にあたりますか?

Vec<T>は動的配列でスタック、VecDeque<T>はリングバッファでキュー、HashMapHashSetはハッシュテーブル(デフォルトはSipHashで、多少の速度と引き換えに意図的な衝突に強くなっています)、BTreeMapBTreeSetは順序付きのB木、BinaryHeap<T>は最大ヒープです。そしてLinkedList<T>は双方向連結リストですが、VecVecDequeより好んで使う場面はめったにありません。トライ木やグラフの型はないので、それらは自分で作ります。

Rustでは、なぜ連結リストを書くのがこれほど難しいのですか?

どの値にも所有者がちょうど1人しかいないからです。単方向連結リストはこのルールに合います。各ノードがOption<Box<Node>>を通じて次のノードを所有するからです。双方向連結リストや親へのリンクを持つ木は合いません。どのノードにも2本のポインタが向かうので、Rc<RefCell<Node>>を使い、逆向きのリンクにはWeakを充てるか、ノードをVecに入れてインデックスでつなぐことになります。『Learning Rust With Entirely Too Many Linked Lists』があるのは、まさにここでつまずく人がとても多いからです。

Rustで最小ヒープを使うにはどうすればよいですか?

BinaryHeap<T>は最大ヒープなので、各要素をstd::cmp::Reverseで包みます。Reverse(x)をプッシュすれば、最小のxが最初に出てきます。ダイクストラ法ではReverse((distance, node))をプッシュします。タプルはまず距離で比較されます。ステップ2で自分でヒープを書いたあとなら、順序を反転させるのは自明です。

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

3つです。動的計画法とPython面接シリーズはPythonで、ビット演算はC++で教えています。これらはステップの後にまとめて載せてあり、それぞれのリンクからその言語でコースを開けます。Rustならメモ化テーブルはVecHashMapです。またデバッグビルドでは整数のオーバーフローでパニックが起きるので、ラップアラウンドに頼るビットのテクニックでは、wrapping_addwrapping_mulでそれを明示します。

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

少なくとも、所有権、借用、構造体、enum、Optionは必要です。Boxとトレイトも知っていると役立ちます。初めて見るものがあれば、まずCoddyのRustコースが無料でそこまで連れて行ってくれます。このパスは、そのコースが終わるところから始まります。

他の学習パス

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

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

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

学習を始める