データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをDartでゼロから実装し、実際に問題を解くのに使います。これを終えると、List、Queue、Mapが何をしてくれているのか、そしてMapのリテラルがなぜキーを挿入した順序を覚えているのかがわかります。開始Dartのコアライブラリは多くの言語より充実していて、dart:collectionにはQueue、LinkedList、スプレー木があります。ただしコアSDKにはヒープも優先度付きキューもありません。このパスでは、すべての構造をDartで作ります。Dartでは健全なnull安全によって、欠けているかもしれないリンクがすべて、チェックが必要なNode?になります。そうして作った構造を使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン284 チャレンジ702 クイズの問題
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをDartで開きます。まだDartで教えていない3つのコースは、ステップの後にまとめて載せています。
List、Queue、Mapが何をしてくれているのか、そしてMapのリテラルがなぜキーを挿入した順序を覚えているのかがわかります。開始DoubleLinkedQueueは自分で書いたことのある構造になり、コアSDKにないヒープは自分で書けるものになり、SplayTreeMapは仕組みのわかる順序付きの木になります。あなたのものが高さ平衡なのに対し、あちらは自己調整型です。開始List.sortは(a, b) => a.compareTo(b)のような比較関数を受け取ります。このステップを終えれば、その呼び出しの裏にあるアルゴリズムを自分で書けます。開始Node?を受け取る関数は、再帰する前にnullを処理しなければならず、そのチェックのあとは型の昇格によってノードを自由に使えます。止まらない再帰はStackOverflowErrorで終わります。動的計画法とビット演算は、それぞれ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プロフィールや履歴書に追加して、雇用主にプログラミングスキルをアピールしましょう。
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進数で表示でき、マスクに実際に何が入っているかを確かめる最も手早い方法になります。