データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをDartでゼロから実装し、実際に問題を解くのに使います。これを終えると、List、Queue、Mapが何をしてくれているのか、そしてMapのリテラルがなぜキーを挿入した順序を覚えているのかがわかります。開始Dartのコアライブラリは多くの言語より充実していて、dart:collectionにはQueue、LinkedList、スプレー木があります。ただしコアSDKにはヒープも優先度付きキューもありません。このパスでは、すべての構造をDartで作ります。Dartでは健全なnull安全によって、欠けているかもしれないリンクがすべて、チェックが必要なNode?になります。そうして作った構造を使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン228 チャレンジ702 クイズの問題
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをDartで開きます。まだDartで教えていない3つのコースは、ステップの後にまとめて載せています。
List、Queue、Mapが何をしてくれているのか、そしてMapのリテラルがなぜキーを挿入した順序を覚えているのかがわかります。開始DoubleLinkedQueueは自分で書いたことのある構造になり、コアSDKにないヒープは自分で書けるものになり、SplayTreeMapは仕組みのわかる順序付きの木になります。あなたのものが高さ平衡なのに対し、あちらは自己調整型です。開始List.sortは(a, b) => a.compareTo(b)のような比較関数を受け取ります。このステップを終えれば、その呼び出しの裏にあるアルゴリズムを自分で書けます。開始Node?を受け取る関数は、再帰する前にnullを処理しなければならず、そのチェックのあとは型の昇格によってノードを自由に使えます。止まらない再帰はStackOverflowErrorで終わります。動的計画法とビット演算は、それぞれ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.
Node?にします。ほかの言語なら実行時に見つかるnullポインタのクラッシュを、Dartのコンパイラは構造を書いている最中に報告してくれます。&、|、^、~、<<、>>があるからです。nextを持つNode<T>クラスは見たとおりのものです。またdart:collectionは多くの標準ライブラリより多くをカバーしています。知っておきたいことが2つあります。コアSDKには優先度付きキューがないこと。そしてMapやSetのリテラルは、挿入順を覚えているLinkedHashMapやLinkedHashSetになることです。出力には便利ですが、ソート済みのマップと同じ約束ではありません。Listは動的配列でスタック、MapとSetはハッシュテーブルで、デフォルトで挿入順を保ちます。dart:collectionはさらに、Queue(DoubleLinkedQueueを選ばない限り、リングバッファであるListQueue)、LinkedListEntryを継承したエントリのためのLinkedList、そして自己調整型の順序付き木であるSplayTreeMapとSplayTreeSetを加えます。ヒープには、Dartチームのpackage:collectionがPriorityQueueを提供しています。トライ木とグラフは自分で書きます。dart:collectionにあるのはキュー、連結リスト、スプレー木までで、PriorityQueueはpackage:collectionにあります。Dartチームがメンテナンスしていますが、自分で追加するパッケージです。そのため、Dartの面接でヒープを書くよう求められても不思議ではなく、それを書くのがステップ2です。SplayTreeMapはいつ使うべきですか?firstKeyAfterやlastKeyBeforeで、ある値の前後で最も近いキーが欲しいときに、SplayTreeMapを使いましょう。ステップ2で作るAVL木は別のアプローチを取り、変更のたびに平衡を取り直して、高さを厳密に抑えます。ListかMapです。またtoRadixString(2)を使えばintを2進数で表示でき、マスクに実際に何が入っているかを確かめる最も手早い方法になります。