本文へ移動

基本情報技術者試験 · 学習ガイド

データ構造

データ構造とは

データ構造とは、データの並べ方と取り出し方の違いを表す型で、用途に合う構造を選ぶことで処理しやすくなります。

エルくんが説明する図解。A/B/Cを入れた縦積みと横の行列、取り出し順CBAとABCを明示。
A、B、Cの順に入れると、スタックはC、B、Aの順、キューはA、B、Cの順で取り出します。前者は後入れ先出し、後者は先入れ先出しです。

データをどの順番で取り出すかによって、適した構造が変わります。皿の積み重ねと受付の列を比べてみましょう。

基本の仕組み

基本の仕組みの図解。直前要素を左、従来の次要素を右、新要素を下に置く。エルくんが新要素から右への参照を先につなぐ場面を描き、直前要素から新要素への参照変更は「②」の点線矢印で示す。
覚えること:途中挿入は新→次、次に直前→新

A、B、Cの順に入れると、スタックはC、B、Aの順、キューはA、B、Cの順で取り出します。前者は後入れ先出し、後者は先入れ先出しです。

配列は添字で直接要素を参照しやすく、連結リストは次の要素への参照をたどります。木は親子関係を持ち、根から枝を選んで要素を探せます。

連結リストの途中への挿入が容易でも、挿入位置を探すコストが消えるわけではありません。操作の前提と全体の処理量を分けて考えます。

単方向リストは、各要素が次の要素への参照を持つ連結リストです。途中へ要素を挿入するには、新要素を従来の次要素へつなぎ、直前要素の参照を新要素へ変更します。先に参照を上書きして後続への道を失わないよう、更新順を追います。

構造を選ぶ条件

構造を選ぶ条件の図解。中央に連結リストの要素を左から右へ並べ、挿入位置までたどる経路を点線矢印で示す。その位置に新しい要素を置き、前後の要素との参照を実線矢印でつなぐ。
覚えること:挿入位置を走査し、参照を付替える

配列は添字による直接参照に向きます。連結リストは参照の付替えで挿入できますが、挿入位置を探す走査は必要です。スタックは後入れ先出し、キューは先入れ先出しで要素を取り出します。

木は親子関係を表す構造です。2分探索木は「左の子孫<節<右の子孫」となるよう値を置き、根から大小比較で左右へ進んで探します。ヒープは親が子以上(または以下)となる完全2分木で、最大値(最小値)を根から取り出せます。ハッシュ表はキーから計算した位置へ格納します。

構造を選ぶ条件
構造代表的な操作・性質
スタックpush・pop(後入れ先出し)
キューenqueue・dequeue(先入れ先出し)
連結リスト参照をたどる・付け替える
2分探索木左<節<右の大小で探索
ヒープ親が子以上(以下)で根が最大(最小)
ハッシュ表キーから格納位置を計算

試験に出る

  • スタック(後入れ先出し)とキュー(先入れ先出し)の取り出し順。
  • 配列は添字で直接参照、連結リストは次の要素をたどるという違い。
  • 単方向リストの挿入で参照を付け替える順序と、走査の手順。
  • 挿入が容易でも挿入位置を探すコストは残ること。
  • Undoなど用途からスタックかキューかを選ぶ判断。

重要な言葉

スタック
最後に入れたものを最初に取り出す後入れ先出しの構造。
キュー
最初に入れたものを最初に取り出す先入れ先出しの構造。
連結リスト
各要素が次の要素への参照を持ち、順にたどる構造。
単方向リスト
次の要素への参照だけを持つ連結リスト。

確認問題

確かめようUndoで直前の操作から戻すならどちら?

スタック。最後に行った操作を先に取り出します。

スタックは、先に入れた要素を先に取り出す。

単方向リストは、次の要素への参照だけを持つ。

最後に入れた要素を最初に取り出す構造は?

各要素が次の要素への参照だけを持つ構造は?

データをどの順番で取り出すかによって、適した構造が変わります。とを比べてみましょう。

A、B、Cの順に入れると、はC、B、Aの順、はA、B、Cの順で取り出します。前者は後入れ先出し、後者は先入れ先出しです。

は添字で直接要素を参照しやすく、は次の要素への参照をたどります。木は親子関係を持ち、根から枝を選んで要素を探せます。

の途中への挿入が容易でも、挿入位置を探すコストが消えるわけではありません。操作の前提と全体のを分けて考えます。

は、各要素が次の要素へのを持つ連結リストです。途中へ要素を挿入するには、新要素を従来の次要素へつなぎ、直前要素の参照を新要素へ変更します。先に参照を上書きして後続への道を失わないよう、更新順を追います。

出典・参考資料

試験の公式案内と、この記事の参考にした学習資料です。

編集:Pinternet Works · 更新日:

教材の編集方針・訂正について