データ構造シリーズ パート1
このステップを始める開始スタック、キュー、二分木、ハッシュテーブル、連結リスト。それぞれをPHPでゼロから実装し、実際に問題を解くのに使います。これを終えると、arrayがスタックとして優秀なのはどんなときか、array_shiftがなぜキューに向かないのか、そしてすべての配列の中にあるハッシュマップが何をしてくれているかがわかります。開始PHPでは、ひとつの型がほぼすべてをこなします。arrayは順序付きのハッシュマップで、リストにも辞書にもスタックにもなります。このパスでは、配列が代わりを務めている構造と、配列では代わりになれない構造をPHPで作り、それを使ってソート、再帰、グラフ探索を行い、最後は採点付きの面接問題で締めくくります。無料、ブラウザ完結、ほとんどのコースに修了証が付きます。
377 レッスン228 チャレンジ702 クイズの問題
各ステップは、すでにあるCoddyのコースの組み合わせで、どの「開始」ボタンもコースをPHPで開きます。まだPHPで教えていない3つのコースは、ステップの後にまとめて載せています。
arrayがスタックとして優秀なのはどんなときか、array_shiftがなぜキューに向かないのか、そしてすべての配列の中にあるハッシュマップが何をしてくれているかがわかります。開始SplDoublyLinkedListは自分で書いたことのある構造になり、SplMinHeapとSplMaxHeapは向きが逆なだけの同じ考え方になり、PHPに用意されていない平衡木も自分で作れるようになります。開始sort()はPHP 8.0から安定です。このステップを終えれば、その約束が何を意味するのか、8つのソートのうちどれならそれを守れるのかがわかります。開始$f = function ($n) use (&$f) { ... }のように自分自身を参照でキャプチャしなければなりません。面接で再帰的なクロージャを求められる前に、知っておきたい細部です。動的計画法とビット演算は、それぞれPythonとC++で教えているため、ステップの後にまとめて載せています。開始専用ページSplPriorityQueueは最大ヒープなので、ダイクストラ法では距離の符号を反転させるか、ステップ2で自作したヒープを使います。開始arrayに任せることなく解きます。開始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.
arrayの正体。PHPのarrayは順序付きのハッシュマップです。だから$a[] = $xも$a['key'] = $xも動き、array_shiftは遅いのです。残りのすべての要素に番号を振り直すからです。本物のスタック、キュー、ハッシュテーブルを作ることで、配列のどの操作が安く、どの操作がひそかに高いのかがわかります。in_arrayは毎回の線形探索ですが、キー付きの配列に対するissetは平均で定数時間です。面接を突破する考え方は、そのページを直す考え方でもあります。&、|、^、~、<<、>>があるからです。arrayを使うという習慣をひとつ捨てればの話です。PHPの配列はリストにも辞書にもスタックにもなれるほど柔軟で、まさにそれが各操作のコストを隠してしまいます。構造を自分で作れば、PHPはアルゴリズムを考えるのに十分な言語であり、PHPが仕事なら面接で使うのに自然な言語でもあります。SplStackとSplQueueはスタックとキューで、どちらもSplDoublyLinkedListの上に作られています。SplMinHeapとSplMaxHeapはヒープ、SplPriorityQueueは優先度順の最大ヒープ、SplFixedArrayは整数インデックスの固定長配列で、arrayより少ないメモリで済みます。ハッシュテーブルには素のarrayを使います。木、トライ木、グラフのクラスはないので、それらはステップ1と2で自分で書きます。array_shiftを使うと遅いのですか?array_shiftの上に作ったキューは、デキューのたびにO(n)、空にするまでに2乗の時間がかかります。代わりにSplQueueを使うか、配列の先頭インデックスを持って進めていきましょう。ステップ1ではキューを自分で作ります。違いを確かめるには、それがいちばん確実な方法です。sort()は安定ですか?sort()、usort()、asort()をはじめとするソート関数は、等しい要素を元の順序のまま保ちます。8.0より前はそうした約束がなかったので、等しい要素の順序に依存するコードは、バージョンによって動作が変わることがありました。ステップ3の8つのソートのうち、マージソートと挿入ソートは安定で、クイックソートとヒープソートは安定ではありません。その理由は、ステップ3を終えればわかります。arrayです。ビットのテクニックを移植するときの落とし穴がひとつあります。&、|、^の両方のオペランドが文字列だと、PHPは各文字のバイト値に対して演算を行い、文字列を返します。まず値が整数であることを確かめましょう。$nextプロパティを持つオブジェクトとして書くのが自然だからです。初めて見るものがあれば、まずCoddyのPHPコースが無料でそこまで連れて行ってくれます。このパスは、そのコースが終わるところから始まります。