Skip to content

Week 2: データ構造の基礎

1. 変数とデータ型

1.1 変数の概念

変数は、プログラム内でデータを格納し、操作するための名前付きの記憶領域です。

例(Python):

x = 5  # 整数型の変数
name = "Alice"  # 文字列型の変数

1.2 基本的なデータ型

  1. 整数型(Integer): 全ての整数 例: -3, 0, 42

  2. 浮動小数点型(Float): 小数を含む数値 例: 3.14, -0.001, 2.0

  3. 文字列型(String): テキストデータ 例: "Hello, World!", 'Python'

  4. ブール型(Boolean): 真偽値 例: True, False

  5. None型(Python特有): 値が存在しないことを示す 例: None

基本的なデータ型の表

データ型 メモリサイズ 説明
整数型(Integer) -3, 0, 42 通常4バイト 全ての整数
浮動小数点型(Float) 3.14, -0.001, 2.0 通常8バイト 小数を含む数値
文字列型(String) "Hello, World!", 'Python' 可変(1文字あたり1〜4バイト) テキストデータ
ブール型(Boolean) True, False 1バイト 真偽値
None型(Python特有) None 0バイト 値が存在しないことを示す

補足説明

  • 整数型:コンピュータのアーキテクチャによっては8バイトの場合もあります。
  • 浮動小数点型:精度の違いにより、4バイト(単精度)の場合もあります。
  • 文字列型:使用される文字エンコーディング(UTF-8, UTF-16など)によってサイズが変わります。
  • ブール型:言語や実装によっては1ビットで表現される場合もありますが、多くの場合1バイト使用します。
  • None型:Pythonの特殊な型で、他の言語ではnullやNULLとして知られることもあります。

1.3 型変換

データ型間の変換を行う操作。

例(Python):

1
2
3
x = 5
y = float(x)  # 整数から浮動小数点数へ変換
z = str(x)    # 整数から文字列へ変換

2. 配列とリスト

2.1 配列

固定長の同じデータ型の要素の集合。

特徴:

  • サイズが固定
  • 連続したメモリ領域に格納
  • インデックスによる高速アクセス

例(C言語):

int numbers[5] = {1, 2, 3, 4, 5};

2.2 リスト

可変長の要素の集合。多くの高級言語で使用される。

特徴:

  • サイズが可変
  • 異なるデータ型の要素を格納可能(言語による)
  • 動的なメモリ割り当て

例(Python):

fruits = ["apple", "banana", "cherry"]
fruits.append("date")  # リストに要素を追加

2.3 配列とリストの操作

  • 要素の追加、削除
  • 要素へのアクセス
  • 要素の検索
  • リストのソート

例(Python):

1
2
3
numbers = [1, 3, 5, 2, 4]
numbers.sort()  # リストをソート
print(numbers)  # 出力: [1, 2, 3, 4, 5]

3. スタックとキュー

3.1 スタック

後入れ先出し(LIFO: Last In, First Out)のデータ構造。

主な操作:

  • push: 要素を追加
  • pop: 最後に追加された要素を取り出す

例(Python でのスタックの実装):

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def is_empty(self):
        return len(self.items) == 0

3.2 キュー

先入れ先出し(FIFO: First In, First Out)のデータ構造。

主な操作:

  • enqueue: 要素を追加
  • dequeue: 最初に追加された要素を取り出す

例(Python でのキューの実装):

from collections import deque

class Queue:
    def __init__(self):
        self.items = deque()

    def enqueue(self, item):
        self.items.append(item)

    def dequeue(self):
        return self.items.popleft()

    def is_empty(self):
        return len(self.items) == 0

4. 実践演習

4.1 リスト操作の演習

タスク: 以下の操作を行うPythonプログラムを作成してください。

  1. 空のリストを作成
  2. リストに数字を5つ追加
  3. リストの3番目の要素を出力
  4. リストを逆順にソート
  5. リストの最初の要素を削除
  6. 現在のリストを出力

4.2 スタックを使用した演習

タスク: スタックを使用して、括弧のバランスをチェックするプログラムを作成してください。 入力文字列に含まれる括弧 '(', ')', '{', '}', '[', ']' のバランスが取れているかを確認します。

例:

  • "((()))" → バランスが取れている
  • "({[]})" → バランスが取れている
  • "({[}])" → バランスが取れていない

4.3 キューを使用した演習

タスク: キューを使用して、印刷ジョブのシミュレーターを作成してください。

  1. ユーザーから印刷ジョブ(文書名)を入力として受け取る
  2. ジョブをキューに追加
  3. 定期的に(例: 3秒ごとに)キューから1つのジョブを取り出し、「印刷中」と表示
  4. キューが空になるまで続ける

5. まとめと次週への橋渡し

Week 2では、プログラミングの基礎となる重要なデータ構造について学びました。変数とデータ型の概念、配列とリスト、スタックとキューの特性と使用方法を理解することで、より効率的なプログラムを設計し実装する基礎が身につきました。

次週(Week 3)では、これらのデータ構造を活用した基本的なアルゴリズムについて学びます。探索アルゴリズム(線形探索、二分探索)やソートアルゴリズム(バブルソート、選択ソート、挿入ソート)、そして再帰の概念を学ぶことで、より複雑な問題解決に取り組む準備を整えます。

準備として、今週学んだデータ構造を使ったプログラムを自分で書いてみると良いでしょう。特に、リスト操作やスタック、キューの基本的な実装を復習しておくことをお勧めします。