株式会社PRUMのmasaです。
今日は「データをどう並べ、どう取り出すか」というルール(データ構造)について、初学者向けにまとめました。
プログラムは「データの集まり」をどう扱うかで、その動き方が大きく変わります。
この記事では、データの扱い方の基本パターンを知ることで、「どのようにデータを整理し、どう処理すべきか」を判断するための土台を身につけることを目的としています。
処理の順番で使い分ける 「スタック」と「キュー」の基本
プログラミングをしていると、複数のデータを一時的に溜めておき、後で順番に取り出して処理したい場面によく遭遇します。
このとき、「どういう順番でデータを取り出すか」というルールを定義するのが、スタック と キュー というデータ構造です。
結論:出口のルールで「できる処理」が変わる
「最後に入れたものを先に出すか(スタック)」、それとも「最初に入れたものから出すか(キュー)」という違いによって、実現できる処理の形が決まります。
この違いを理解することで、処理の流れが整理され、特に順序が重要なロジックにおいて、意図しない挙動(バグ)を防ぎやすくなります。
基礎知識:LIFOとFIFO
言葉だけ聞くと難しそうですが、仕組みはシンプルです。
-
スタック(Stack) : LIFO(Last-In, First-Out / 後入れ先出し)
→ 最後に保存したデータが、最初に取り出される -
キュー(Queue) : FIFO(First-In, First-Out / 先入れ先出し)
→ 最初に保存したデータが、順番に取り出される
具体例:机の上の書類とスーパーのレジ待ち
スタックは「机の上に積み上げた書類」です。
最後に置いた書類が一番上に来るため、次に使うときは一番最初に取り出されます。
ブラウザの「戻る」ボタンもこの考え方に近く、最後に見たページに戻ります。
※実際には「戻る用」と「進む用」で複数のスタックを組み合わせて実現されています。
キューは「スーパーのレジ待ち」です。
先に並んだ人から順番に案内されます。
コンピュータでは、プリンターの印刷待ちなどで使われています。
複数データを効率よく扱う 「配列」と「リスト」の使い分け
次に、複数のデータをメモリ上にどう並べるかという話です。
よく使われるのが 配列(Array) と リスト(連結リスト) です。
結論:やりたい操作で「収納方法」を選ぶ
データ構造には、それぞれ得意・不得意があります。
「どんな操作を一番よく行うか」で選ぶことが重要です。
基礎知識:メモリ上の並び方の違い
-
配列(Array)
メモリ上に「連続した領域」として並んでいます
(言語によって内部実装は異なりますが、基本的な考え方は同じです) -
リスト(連結リスト / Linked List)
データがバラバラな場所にあり、それぞれが「次のデータの場所」を持っています
(この「次を指す仕組み」をポインタと呼びます)
具体例:マンションの郵便受けと連絡網
配列は「番号が決まっているマンションの郵便受け」です。
101号室、102号室…と並んでいるので、
「105号室」と言われれば一瞬で見つけられます。
- メリット:特定の位置のデータを高速に取得できる
- デメリット:途中に要素を入れるとき、後ろのデータをずらす必要がありコストが高い
リストは「電話の連絡網」です。
「Aさん→Bさん→Cさん」と順番に繋がっています。
- メリット:途中にデータを追加・削除しやすい(つなぎ替えるだけ)
- デメリット:目的のデータにたどり着くには順番に追う必要がある
どちらを使うべきかの判断基準
迷ったときは、 どの操作を一番よく行うか で考えます。
特定の位置のデータをすぐ取り出したい
→ 配列
途中への追加・削除が多い
→ リスト
ただし実務では、CPUキャッシュ効率などの理由から、配列(動的配列)が使われるケースが多いです。
さいごに
データ構造は一見地味ですが、「データをどう扱うか」というプログラムの根本的な考え方を支える重要な土台です。
いきなりすべてを理解する必要はありません。
まずは「このデータはどんなルールで扱うと自然か?」という視点を持つだけで、コードの見え方が変わってきます。
少しずつ経験を積みながら、自分なりに「扱いやすい形」を選べるようになっていきましょう。
PRUMのエンジニアの95%以上は未経験からの採用です。
よければコーポレートサイトにも遊びに来てください。
▶ コーポレートサイト
エンジニアの方に役立つ記事をまとめたサイトも運営しています。もしご興味あれば覗いてみてくださいね。
▶ エンジニアに役立つ記事サイト