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言語は同じとなっておらず,諸君が使っ ているシステムではこの表のようになっている.いろいろな型があるが,ほとんどの場合, charintdoubleで十分である.諸君が作るプログラムでは,これらで 十分,間に合うが,問題が生じたときのみ他の型を使えば良い.

表 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