データ構造 -情報処理シンプルまとめ

データ構造のブログに関するアイキャッチ画像 アルゴリズムとプログラミング

 基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,データ構造についてシンプルにまとめています。変数(値の代入,定数),配列(要素,添字,一次元配列,二次元配列,配列の操作(探索,更新,挿入,削除)),リスト(データ部,ポインタ部,単方向リスト,双方向リスト,環状リスト,リストの操作(探索,更新,挿入,削除),配列によるリスト),キュー(待ち行列,エンキュー(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分木

 完全2分木とは,根から葉までの深さがすべて等しいか,1つだけ深い根が木全体の左側にある木構造のことをいいます。

完全2分木に関する説明画像
2分探索木

 2分探索木は,データの探索に適したデータ構造で,「節の値>左の子の値」、「節の値<右の子の値」という大小関係を持っています。

2分探索木に関する説明画像
データの探索
2分探索木でのデータの探索に関する説明画像
データの挿入
2分探索木でのデータの挿入に関する説明画像
データの削除
2分探索木でのデータの削除に関する説明画像_1
2分探索木でのデータの削除に関する説明画像_2
ヒープ

 ヒープとは,すべての節で「親の節の値>子の節の値」,または,「親の節の値<子の節の値」の大小関係が成り立つ木構造をいいます。

ヒープに関する説明画像

まとめ

 今回は,データ構造について,シンプルにまとめてみました。基本情報技術者試験や応用情報技術者試験で問われるところですので,しっかり頑張りましょう。