- 配列
- 配列(Array)
配列は最も基本的なデータ構造の一つで、複数要素をまとめて保持するデータ構造。
配列全体に対してひとまとまりの固定のメモリ領域が割り当てられる。
配列要素(element)は、データ領域の先頭から割り当てられる配列のインデックス(index)を用いて参照することができる。
int array[]= {5,1,3,4,2};
int a;
a=array[2];
配列の利点
- 構造が簡単で扱いやすい
- データ(要素)へのアクセスが高速
配列の欠点
- データサイズ(要素数)が固定(基本的に後からのデータサイズの変更はできない)
- 要素数が変動するデータに対して、メモリの利用効率が悪い。(要素数が少ない時に利用しない領域が無駄になる)
- 追加(append)、挿入(insert)、削除(delete)などの要素数が変化するような操作に対しては処理が複雑になるか、もしくはできない場合がある。
(挿入、削除の操作で発生する要素のシフト操作はコストのかかる処理で、特に先頭に追加をする場合などは非常にコストの高い処理になる)
- 要素の追加
int array[]= new int[5];
array[0]=5;
array[1]=1;
array[2]=3;
array[3]=4;
array[4]=2;
//array[5]=8; //エラー
要素の挿入
int array[]= new int[5];
array[0]=5;
array[1]=1;
array[2]=3;
//挿入
array[3]=array[2];
array[2]=array[1];
array[1]=8;
要素の削除
int array[]= {5,1,3,4,2};
//削除
array[2]=array[3];
array[3]=array[4];
array[4]=0;
- 動的配列(Dynamic array)
動的配列は要素の追加や削除が可能な配列構造。可変配列(resizable array)、配列リスト(array list)とも呼ばれる。
動的配列は通常の配列と同様に最初に固定サイズの配列を確保し、要素数に応じてメモリ領域の確保と解放をすることで実現する。
例えば、最初に確保した配列が一杯になれば、最初の2倍のサイズの新しい配列を作り、配列の要素が半分に満たなかった場合は配列のサイズを半分にする。
そのため、最初に確保する領域より極端に大きいデータや小さいデータを扱うとメモリの確保や解放に伴うオーバーヘッドが発生する。