# Chapter16-6「データの持ち方」 ## 8/1(日) ###### tags:`基本情報技術` さつき: > データは集まって意味を成すことが多い > どのような形でメモリ上に配置するか、ずらりと並べるか、階層管理しなきゃなのか... > こうした、データを配置する方法を指して、データ構造といいます * 配列 * 同じサイズのデータが連続して並ぶ * データの挿入や削除は不得手 * リスト * データとデータを数珠つなぎにして管理する * リストの扱うデータには、ポインタがセットになっている * ポインタさえ書き換えれば、データの追加や削除が簡単 * ポインタを順番にたどらないといけないため、添字を使って個々のデータにアクセスする、ということはできない * キュー * 待ち行列、FIFO * GUIプログラムはキューに溜め込まれた操作をひとつずつ処理していきます * プリンタは印刷用のキューにたまったデータをひとつずつ印刷していきます * スタック * LIFO * サブルーチンの呼び出し後、元の場所に戻れるのは、戻り位置がスタックで保存されているから。 * 過去問 * OK * なんか見たことある。  にわ: - 読み込み * データの持ち方=データ構造がアルゴリズムの良し悪しを左右する! * 配列 * 最初に固定サイズでメモリの領域を確保するので、データの追加や削除はしにくい。 * 添字で各データに直接アクセス可能。 * リスト * データが数珠繋ぎになってる。 * ポインタつかって各データにアクセスするので、ポインタさえ書き換えればデータの追加や削除が簡単。 * ポインタを順に辿らないと各データにはアクセスできない。 * 単方向、双方向、循環の3つの種類がある。 * キュー * 入ったデータから順番に処理を行う。レジ待ちと一緒。 * 入力されたデータが順番に処理されなければいけない状況、例えばGUIプログラムやプリンタはキューが使われる。 * スタック * キューの逆。最後に格納したデータから順番に処理を行う、後入れ先出し。 * 呼び出したサブルーチンの処理終了後に元の場所に戻れるのは、「サブルーチン実行後どこに戻るのか」がスタックとして管理されてるから。 - 過去問 * 問1:OK * 問2:んー・・・わかるような分からんような。 * あ、なるほど。順番にスタックに突っ込むんだけどどっかで取り出して、ってやる場合もあって、それであり得るのが選択肢中1つだけってことね ちさと: * データ構造:データを配置する方法(データをどんな形でメモリ上に配置するか、など) * 配列 * 最初に固定サイズで領域を確保する=途中でデータの削除や挿入をするのに向いてない * 添字(配列の中の何番目の箱かを指定できる番号)を使うことで、各データに直接アクセスできる * リスト * ポインタ(次のデータがメモリのどこにあるかの位置を表す番号)がくっついている * このポインタを書き換えればいくらでもデータを繋ぎ変えられるので、データの追加・削除が簡単にできる * 添字がないので、ポインタを順に辿らないと各データに直接アクセスすることはできない * キュー * 先に入ったものから順に処理されていく * スタック * キューの逆 * 最後に入ったものから順に処理されていく * 過去問 * 問1:おk * 問2:なるなる…途中で出してとかアリなのか。 まい: * データ構造/ データを配置する方法 * アルゴリズムの良し悪しは、プログラムの特性にあったデータ構造が採られているか否かに大きく左右される * 配列   * 一次元配列 one-dimensional array   * 多次元配列 Multidimensional array: 固定で扱うマス目状データなどに重宝する * リスト * リストの扱うデータにはポインタという番号がくっついてる * ポインタを書き換えればいくらでもデータをつなぎ替えることができる。柔軟。 * データの追加、挿入、削除も簡単 * 単方向リスト: 次のデータのポインタのみを持つ。先頭から順に辿る。 * 双方向リスト: 次のデータのポインタと前のデータのポインタも持つ。前後どちらにもたどることができる。 * 循環リスト: 次のデータのポインタを持つ。最後尾データは先頭データのポインタを持つのでぐるぐる回る。 * キュー(FIFO): GUIプログラム、プリンタなど * スタック(LIFO): * push, pop * サブルーチン実行後どこに戻るかをスタックとして管理している * 過去問 * 問一 ok * 問二 ややこしかったがok