3 これまで学習したデータ構造

データ構造には,表1に示すようなものがある.この うち基本データ型と配列型は既に学習したはずだ! 本日はレコード型--C言語では構造体 で表現--を学習する.構造体を学習する前に,データ構造というものを頭に入れるため に,既に学習した単純型と配列型の復習をしておく.さらに,構造体の役割を簡単に述べ る.
表 1: データ構造の種類
データ構造 基本データ構造 基本データ型 単純型 整数型
        実数型
        文字型
        論理型
        数え上げ型
      ポインタ型
    構造型 配列型
      レコード型
    抽象データ型
  問題向きデータ構造 線形リスト 単純リスト
      双リスト
      環状リスト
    木 二分木 完全二分木
        二分探索木
        バランス木
      多分木
      バランス木 AVL木
        B木
    スタック
    キュー

3.1 単純型変数

単純型の変数は,次のように変数に一つの数値2しか代入で きないものを言う.
	char c, h, moji;
	int i, j, seisu;
	double x, y, jisu;
通常,これを変数と言う.変数というと,この単純型を示す場合が多いが,配列や構造体 を含める場合もあるから,文脈から適当に判断しなくてはならない.

これのイメージは,図2に示しているとおりで,変数とは数値を 入れる箱のようなものである.整数型と倍精度実数型の変数は,数学の変数と全く同じで ある.

図 2: 変数のイメージ.変数とはデータを入れる箱のようなもの.
\includegraphics[keepaspectratio, scale=0.8]{figure/image_variable.eps}

図を見て分かるように,箱の大きさが型によって異なる.これは,一つのデータを表現す るために必要な情報量が異なるためである.情報量の単位は,ビット(bit)が使われる.2 進数の1桁を1ビットと言う.8ビットで1バイトとなり,それがコンピューターで使われる 基本単位となる.

同じint型でもいろいろあり,表現できる範囲が異なっている.これは一つの変数の 情報量の差から生まれる.C言語で使われる型によって表現できる範囲を 2に示す.全てのC言語は同じとなっておらず,諸君が使っ ているシステムではこの表のようになっている.いろいろな型があるが,ほとんどの場合, char,int,doubleで十分である.諸君が作るプログラムでは,これらで 十分,間に合うが,問題が生じたときのみ他の型を使えば良い.

表 2: 型によるデータの表現の違い
型 バイト長 範囲 有効精度
char 1 -128〜127
signed char 1 -128〜127
unsigned char 1 0〜255
short int 2 -32768 〜 32767
signed short int 2 -32768 〜 32767
unsigned short int 2 0 〜 65535
int 4 -2147483648 〜 2147483647
signed int 4 -2147483648 〜 2147483647
unsigned int 4 0 〜 4294967295
long int 4 -2147483648 〜 2147483647
signed long int 4 -2147483648 〜 2147483647
unsigned long int 4 0 〜 4294967295
float 4 およそ $ 10^{-38}$〜$ 10^{38}$ およそ 6桁
double 8 およそ $ 10^{-308}$〜$ 10^{308}$ およそ 15桁
long double 12 およそ $ 10^{-4932}$〜$ 10^{4932}$ およそ 18桁

3.2 配列

一次元の配列は数学のベクトルと,二次元の配列は行列とよく似ている.実際,C言語で ベクトルや行列の演算を行うときには,構造が同じ配列を使うことになる.順序 づけられた同じ型のデータが複数ある場合,配列の出番となる.添え字(これが順序を表 す)により,それらにアクセスできるので,データの操作が簡単にできる.

配列を使う場合,

	int i[10], j[100][100];
のように宣言を行う.そうすると図3のように,メモリー領域が確保され, 配列が使えるようになる.この配列のデータにアクセスするためには,配列名と添え字を 指定する.次のようにである.
	i[3]=5;
	c=i[3];
図 3: 配列のイメージ.データを入れる箱がいっぱいある.ただし箱の大きさは全 て同じ.
\includegraphics[keepaspectratio, scale=0.8]{figure/image_array.eps}

3.3 構造体

構造体は,データの内容をわかりやすくするためにある.例えば,住所録を作るとなると 一つのデータの集まりは, -4pt となるであろう.そうすると,これでひとつのデータの集まりとしたくなる.これを実現 するために構造体がある.具体的には,つぎに述べることにする.

データの集まりということでは,配列と似ている.しかし,配列は同じ型のデータの集ま りであるが,構造体は異なる型3のデータの集まりであること に注意が必要である.使い方も全く異なる.


ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年4月10日
no counter