---
# System prepended metadata

title: Chapter16-6「データの持ち方」
tags: [基本情報技術]

---

# Chapter16-6「データの持ち方」

## 8/1(日)

###### tags:`基本情報技術`

さつき：

> データは集まって意味を成すことが多い
> どのような形でメモリ上に配置するか、ずらりと並べるか、階層管理しなきゃなのか...
> こうした、データを配置する方法を指して、データ構造といいます

*　配列
    *　同じサイズのデータが連続して並ぶ
    *　データの挿入や削除は不得手
*　リスト
    *　データとデータを数珠つなぎにして管理する
    *　リストの扱うデータには、ポインタがセットになっている
    *　ポインタさえ書き換えれば、データの追加や削除が簡単
    *　ポインタを順番にたどらないといけないため、添字を使って個々のデータにアクセスする、ということはできない
*　キュー
    *　待ち行列、FIFO
    *　GUIプログラムはキューに溜め込まれた操作をひとつずつ処理していきます
    *　プリンタは印刷用のキューにたまったデータをひとつずつ印刷していきます
*　スタック
    *　LIFO
    *　サブルーチンの呼び出し後、元の場所に戻れるのは、戻り位置がスタックで保存されているから。
*　過去問
    *　OK
    *　なんか見たことある。　


にわ：
- 読み込み
    * データの持ち方＝データ構造がアルゴリズムの良し悪しを左右する！
    * 配列
        * 最初に固定サイズでメモリの領域を確保するので、データの追加や削除はしにくい。
        * 添字で各データに直接アクセス可能。
    * リスト
        * データが数珠繋ぎになってる。
        * ポインタつかって各データにアクセスするので、ポインタさえ書き換えればデータの追加や削除が簡単。
        * ポインタを順に辿らないと各データにはアクセスできない。
        * 単方向、双方向、循環の3つの種類がある。
    * キュー
        * 入ったデータから順番に処理を行う。レジ待ちと一緒。
        * 入力されたデータが順番に処理されなければいけない状況、例えばGUIプログラムやプリンタはキューが使われる。
    * スタック
        * キューの逆。最後に格納したデータから順番に処理を行う、後入れ先出し。
        * 呼び出したサブルーチンの処理終了後に元の場所に戻れるのは、「サブルーチン実行後どこに戻るのか」がスタックとして管理されてるから。
- 過去問
    * 問１：OK
    * 問２：んー・・・わかるような分からんような。
        * あ、なるほど。順番にスタックに突っ込むんだけどどっかで取り出して、ってやる場合もあって、それであり得るのが選択肢中1つだけってことね



ちさと：
* データ構造：データを配置する方法（データをどんな形でメモリ上に配置するか、など）
* 配列
    * 最初に固定サイズで領域を確保する＝途中でデータの削除や挿入をするのに向いてない
    * 添字（配列の中の何番目の箱かを指定できる番号）を使うことで、各データに直接アクセスできる
* リスト
    * ポインタ（次のデータがメモリのどこにあるかの位置を表す番号）がくっついている
    * このポインタを書き換えればいくらでもデータを繋ぎ変えられるので、データの追加・削除が簡単にできる
    * 添字がないので、ポインタを順に辿らないと各データに直接アクセスすることはできない
* キュー
    * 先に入ったものから順に処理されていく
* スタック
    * キューの逆
    * 最後に入ったものから順に処理されていく
* 過去問
    * 問１：おk
    * 問２：なるなる…途中で出してとかアリなのか。


まい：
* データ構造/ データを配置する方法
   * アルゴリズムの良し悪しは、プログラムの特性にあったデータ構造が採られているか否かに大きく左右される
* 配列
　　* 一次元配列 one-dimensional array
　　* 多次元配列 Multidimensional array: 固定で扱うマス目状データなどに重宝する
* リスト
   * リストの扱うデータにはポインタという番号がくっついてる
   * ポインタを書き換えればいくらでもデータをつなぎ替えることができる。柔軟。
   * データの追加、挿入、削除も簡単
      * 単方向リスト: 次のデータのポインタのみを持つ。先頭から順に辿る。
      * 双方向リスト: 次のデータのポインタと前のデータのポインタも持つ。前後どちらにもたどることができる。
      * 循環リスト: 次のデータのポインタを持つ。最後尾データは先頭データのポインタを持つのでぐるぐる回る。
* キュー(FIFO): GUIプログラム、プリンタなど
* スタック(LIFO): 
  * push, pop
  * サブルーチン実行後どこに戻るかをスタックとして管理している

* 過去問
  * 問一 ok
  * 問二 ややこしかったがok 