基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,データ構造についてシンプルにまとめています。変数(値の代入,定数),配列(要素,添字,一次元配列,二次元配列,配列の操作(探索,更新,挿入,削除)),リスト(データ部,ポインタ部,単方向リスト,双方向リスト,環状リスト,リストの操作(探索,更新,挿入,削除),配列によるリスト),キュー(待ち行列,エンキュー(ENQ,enqueue),デキュー(DEQ,dequeue),データの格納,データの取り出し),スタック(プッシュ(push),ポップ(pop),データの格納,データの取り出し),木構造(親,子,節(ノード),枝(ブランチ),根(ルート),葉(リーフ),2分木(2分木の走査(先行順,中間順,後行順)),完全2分木,2分探索木(データの探索,データの挿入,データの削除),多分木,ヒープ)ついて説明します。どれも大切な内容ですので,繰り返しじっくり読んでみてください。
アルゴリズムとプログラミングの内容を実践的に学びたい場合は,先に,開発環境を整えてください。

データ構造
変数
変数とは,データを一時的に格納する記憶領域のことをいいます。
※ データは,主記憶装置に格納される
※ 変数は,名前(変数名)を付けて管理する
※ 定数…値が変化しない数字や文字列
値の代入
変数に値を格納することを代入といい,擬似言語では次のように記述します。
※ 擬似言語…アルゴリズムを表現するための擬似的なプログラム言語。基本情報技術者試験などで使用される。詳細は「流れ図と擬似言語によるプログラミング-擬似言語 -情報処理シンプルまとめ」を参照
変数名 ← 値
※ 数字や文字などを代入することができる
たとえば,変数aに10を代入する場合は,次のように記述します。
a ← 10
※ 代入先の変数に値が格納されていた場合は,新しい値に置き換わる
配列
配列とは,同じデータ型の複数のデータを連続して配置するデータ構造のことをいいます。
一次元配列
一次元配列は,データが一方向に並んでいるデータ構造です。それぞれの要素の値は,添字を指定して参照します。
配列名[番号]
値の代入
一次元配列の要素に値を代入する場合,擬似言語では次のように記述します。
※ 擬似言語…アルゴリズムを表現するための擬似的なプログラム言語。基本情報技術者試験などで使用される。詳細は「流れ図と擬似言語によるプログラミング-擬似言語 -情報処理シンプルまとめ」を参照
配列名[番号] ← 値
※ 数字や文字などを代入することができる
たとえば,配列bの4番目の要素に10を代入する場合は,次のように記述します。
b[4] ← 10
※ 代入先の配列の要素に値が格納されていた場合は,新しい値に置き換わる
二次元配列
二次元配列は,データが縦と横に並んでいるデータ構造です。それぞれの要素の値は,添字を指定して参照します。
配列名[行番号, 列番号]
値の代入
二次元配列の要素に値を代入する場合,擬似言語では次のように記述します。
※ 擬似言語…アルゴリズムを表現するための擬似的なプログラム言語。基本情報技術者試験などで使用される。詳細は「流れ図と擬似言語によるプログラミング-擬似言語 -情報処理シンプルまとめ」を参照
配列名[行番号, 列番号] ← 値
※ 数字や文字などを代入することができる
たとえば,配列cの2行目4列目の要素に10を代入する場合は,次のように記述します。
c[2, 4] ← 10
※ 代入先の配列の要素に値が格納されていた場合は,新しい値に置き換わる
配列の操作
探索
配列で要素の探索を行う場合は,先頭データから順に探索データが見つかるまで調べます(線形探索の場合)。
更新
配列で要素の更新を行う場合は,更新するデータを探索により調べ,新しいデータに書き換えます。
挿入
配列で要素の挿入を行う場合は,配列のサイズを挿入するデータの数だけ大きくし,挿入する位置よりも後ろのデータを後ろに移動して,空いた位置にデータを書き込みます。
削除
配列で要素の削除を行う場合は,削除するデータを削除し,空いた位置に後ろのデータを順に移動します。
リスト
リストとは,データを連結したデータ構造のことをいい,データを格納するデータ部と,次のデータの位置を格納するポインタ部から構成されます。
単方向リスト
単方向リストは,次のデータの位置を示すポインタのみを持つリストです。データを,先頭から末尾の方向のみにたどることができます。
双方向リスト
双方向リストは,前のデータの位置を示すポインタと,次のデータの位置を示すポインタを持つリストです。データを,先頭からも末尾からもたどることができます。
環状リスト
環状リストは,単方向リストの最後のデータのポインタに,先頭データの位置を示すポインタを持たせたリストです。データを,環状にたどることができます。
リストの操作
探索
リストで要素の探索を行う場合は,先頭から順にポインタをたどり探索データが見つかるまで調べます。
更新
リストで要素の更新を行う場合は,更新するデータをポインタをたどって調べ,新しいデータに書き換えます。
挿入
リストで要素の挿入を行う場合は,挿入する位置の前のデータのポインタを挿入するデータのアドレスに書き換え,挿入するデータのポインタに次のデータのアドレスを書き込みます。
削除
リストで要素の削除を行う場合は,削除するデータの前のデータのポインタを,削除するデータの次のデータのアドレスに書き換えます。
配列によるリスト
リストは,2次元配列により表すこともできます。
キュー
キューとは, 先に格納したデータから取り出す,先入れ先出しの性質を持つデータ構造です。
※ キューは,待ち行列とも呼ばれる
※ 先入れ先出し…FIFO(First In First Out)
- エンキュー(ENQ:enqueue)… キューにデータを格納すること
- デキュー(DEQ:dequeue)… キューからデータを取り出すこと
データの格納
配列を使用してキューにデータを格納する方法は,次のとおりです。
データの取り出し
配列を使用してキューからデータを取り出す方法は,次のとおりです。
スタック
スタックとは,後に格納したデータから取り出す,後入れ先出しの性質を持つデータ構造です。
※ 後入れ先出し…LIFO(Last In First Out)
- プッシュ(push)…スタックにデータを格納すること
- ポップ(pop)…スタックからデータを取り出すこと
データの格納
配列を使用してスタックにデータを格納する方法は,次のとおりです。
データの取り出し
配列を使用してスタックからデータを取り出す方法は,次のとおりです。
木構造
木構造とは,要素同士の関係を階層構造で表すデータ構造のことをいいます。
■ 2分木
2分木とは,すべての枝の分岐が2つ以下である木構造をいいます。
2分木の走査
走査とは,すべての節を一定の順序でたどることをいい,次のような種類があります。
完全2分木
完全2分木とは,根から葉までの深さがすべて等しいか,1つだけ深い根が木全体の左側にある木構造のことをいいます。
2分探索木
2分探索木は,データの探索に適したデータ構造で,「節の値>左の子の値」、「節の値<右の子の値」という大小関係を持っています。
データの探索
データの挿入
データの削除
ヒープ
ヒープとは,すべての節で「親の節の値>子の節の値」,または,「親の節の値<子の節の値」の大小関係が成り立つ木構造をいいます。
まとめ
今回は,データ構造について,シンプルにまとめてみました。基本情報技術者試験や応用情報技術者試験で問われるところですので,しっかり頑張りましょう。