システム開発

【基本情報】初心者向け!配列とリストの違いについて解説

お茶ん太
お茶ん太

この記事では、配列とリストについて、初心者にも分かりやすく図解付きで丁寧に解説しています!

配列

  • 変数はプログラム内で数字や文字列を入れる箱
  • 配列は複数の変数を1つにまとめたもので、長さを指定して定義する必要がある(長さが固定)添字でデータ位置を示すので直接データにアクセスできる特徴がある
  • 配列はデータの挿入と削除が苦手

リスト

  • リストも複数の変数を1つにまとめたものだが、配列と違い、ポインタを使って次のデータの場所を指定する
  • リストはデータにアクセスするとき、前から順番に辿っていく必要がある
  • リストはデータの挿入と削除が得意

変数と配列

変数とは数字や文字列等のデータを格納する箱のようなものです。変数を用意する時は、「変数の名前」と「変数に格納するデータ型」の2つを必ず決めます。

変数の箱を用意すれば、そこに値を格納することができます。変数に入れた値や文字を使ってプログラムは命令を処理します。

実際のプログラムで見てみましょう。例えば、ユーザに年齢を入力させて大人料金なのか子供料金なのか、メッセージを表示するプログラムでは、「age」が年齢を入れる変数になっています。

配列は、複数個の変数を1つにまとめたものです
配列には同じデータ型の変数が入りますが、それらを区別するのが添字です。配列内のデータにアクセスする時は、「2番目のデータを取得」のように添字を指定します。

配列は変数5個分みたいに長さを指定して定義するため、途中にデータを挿入したり削除することが苦手です。(完全に出来ないわけではありません)

実際に配列がプログラミングで使われている所を見てみましょう。下の例では、5人分の点数をscores()という配列に入れています。

ポインタを使うリスト

リストは配列と同じように複数の変数を1つにまとめて管理します。リストはポインタを使って次のデータがどこにあるのかを指定します。最初のデータからポインタを辿ることで目的のデータにアクセスします。

リストは配列と違い、データの追加や削除が簡単に行えます

リストはポインタを最初から順番に辿らないと、欲しいデータにアクセス出来ません。一方、配列は添字を指定することで直接データにアクセス出来ます。なので、欲しいデータに早くアクセスできるのは配列になります。

リストはポインタの持ち方によって分類されます。ここでは単方向リストと双方向リストを紹介します。

単方向リスト

単方向リストは一方通行で次のデータを指定するリストです。最も基本的な構造のリストですね。

双方向リスト

双方向リストは次のデータのポインタと、前のデータのポインタの両方を持つので、前後どちらにも辿ることが出来ます。

基本情報技術者試験での出題例

令和5年度問2

基本情報技術者
科目A 令和5年度問2

双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタa~fの中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。

ア a,b,e,f   イ a,e,f   ウ a,f   エ b,e

正解と解説

正解は”ウ”

社員Gを追加する前のリストはこんな感じです。

ここに社員Gを追加してみましょう。変わるのは社員Aの次ポインタと社員Kの前ポインタですね。よって答えはウです。

平成30年度春期問6

基本情報技術者
午前試験 平成30年度春期問6

リストを二つの1次元配列で実現する。配列要素box[ i ]とnext[ i ]の対がリストの一つの要素に対応し,box[ i ]に要素の値が入り,next[ i ]に次の要素の番号が入る。配列が図の状態の場合,リストの3番目と4番目との間に値がHである要素を挿入したときのnext[ 8 ]の値はどれか。ここで,next[ 0 ]がリストの先頭(1番目)の要素を指し,next[ i ]の値が0である要素はリストの最後を示し,
next[ i ]の値が空白である要素はリストに連結されていない。

ア 3     イ 5     ウ 7     エ 8

正解と解説

正解は”ウ”

ややこしいので、まずはリストを並べてみましょう。

  • next[ 0 ]、つまり添字が1の要素がリストの先頭
  • next[ i ]の値が0である要素、つまりnext[ 2 ]はリストの最後
  • next[ i ]が空白の要素はリストに連結されていない

以上のことから、リストはこうなります。

ここにHの要素を足すとこうなります。よって、next[ 8 ]は7になります。

平成29年度春期問4

基本情報技術者
午前試験 平成29年度春期問4

データ構造の一つであるリストは,配列を用いて実現する場合と,ポインタを用いて実現する場合とがある。配列を用いて実現する場合の特徴はどれか。ここで,配列を用いたリストは,配列に要素を連続して格納することによって構成し,ポインタを用いたリストは,要素から次の要素へポインタで連結することによって構成するものとする。

ア 位置を指定して,任意のデータに直接アクセスすることができる。

イ 並んでいるデータの先頭に任意のデータを効率的に挿入することができる。

ウ 任意のデータの参照は効率的ではないが,削除や挿入の操作を効率的に行える。

エ 任意のデータを別の位置に移動する場合,隣接するデータを移動せずにできる。

正解と解説

正解は”ア”

配列は位置を指定することで目的のデータに直接アクセス可能です。