明日から役立つ?プログラマーの考え方講座 その4
「データ構造(1):配列」

こんにちは。鳥井雪です。
ヒューマンアカデミー こどもプログラミング教室の教材監修をしています。
今回は本編にもどり、プログラマーの考え方のご紹介をしていこうと思います。
「データ構造について」の第1回、「配列」についてです。

データ構造ってなんだろう?

データ構造は、プログラムを考えるときに、とても大事な要素のひとつです。プログラミングでやりたいことをやるための、とても便利な道具、と言い換えることもできます。データ構造、なんてちょっと難しそうですよね。でも怖がらずに言葉を眺めてみましょう。「データ(情報)」の「構造(組み合わせ、組み合わせ方)」...情報をどんな風に組み合わせるか、情報がどんな形に組み合わさっているか。

うーん、まだいまいち分かりにくいですね。
そもそも、データ構造は何のために使うのでしょうか?それは、「構造(組み合わせ方)によってプログラム上での意味を表現するため」、そしてさらに「プログラムで扱いやすいようにするため」です。 ますますふわふわしてきました。喩えとして、わたしたち人間がいつも使っているデータ構造っぽいものを見てみましょう。

ここに「いちご」という言葉があるとします。
この言葉を構成するデータはなんでしょうか?「い」「ち」「ご」というそれぞれの文字?その通りです。
でも、3つの文字をただ集めただけでは、「ちいご」「ごいち」なんていう並びになってしまうかもしれません。読んでいる人は意味が分かりませんね。意味を表現するには、3つの文字が、[い][ち][ご]の順に並んでいる(組み合わさっている)ことが必要です。それを頭から順に読んでいくことで、わたしたちは「いちご」を意味のある言葉として受け取ることができます。

「いちご」は、3つの文字のデータと、それらがある順番に並んでいるという構造によって意味を持つのですね。この例は、コンピューターではなく人間が情報を読み取る場合の話です。同じようにプログラムも、データをある規則にしたがって組み合わせることで、意味をもったものとして扱うことができるのです。

データ構造のひとつ、「配列」

データ構造は組み合わせですから、必要に応じて、どんな組み合わせ方も考えられます。けれど、やはり基本の、扱いやすくよく利用される構造がいくつかあります。その代表的なものの1つが「配列」です。

基本の配列をイメージするには、同じサイズの箱がずらっと並んでいるところを想像してもらうといいでしょう。
例えば下は、サイズが5の配列です。空の箱 [ ] の中に、データが入ります。

< 全て空の配列 >
[ ] [ ] [ ] [ ] [ ]

< 数字のデータが3つ入ったところ >
[3] [5] [1] [ ] [ ]

この3つの数字はなんでしょうね、例えば数字は出席番号で、配列の順番は成績順を表していることにしましょうか。出席番号3番の生徒が一位、5番の生徒が二位、1番の生徒が三位...といった具合です。配列は比較的単純なデータ構造ですから、扱うプログラムもシンプルになることが多いです。
例えば、

・テストの点数の高い順に、出席番号を空の配列に先頭から詰めていく
とか
・配列を先頭から3, 5, 1 と読みとって、成績順の出席番号を表示する
など。

この「どう扱うか」の部分が、アルゴリズムと呼ばれます。プログラミングとは、データ構造と、それをどのように扱うか(アルゴリズム)の2つで成り立っているということもできます。データ構造には定番のものだけでも様々な種類があり、それぞれ用途や効率によって何を使うかを決めていきます。その話はまた次回に。

データ構造の考え方を日常に使うと...?

わが家には木製のクリスマス・アドベントカレンダーがあります。今3歳の子どものために、一昨年おばあちゃん(わたしの母)から贈られたものです。1から24までの空の箱がずらっと並んでいて、そこにチョコレートやキャンディ、シールなんかのお楽しみを1つずつ詰めていきます。まさに配列ですね。12月になったら毎日ひとつずつ、子どもが開けていきます。

一昨年と去年はそれでよかったのですが、去年の9月にわが家にはもう一人、子どもが生まれました。今年の12月にはその子も一歳と3ヶ月です。その子のためにもアドベントカレンダーのお楽しみを用意したいですよね。しかし、今あるアドベントカレンダーの1日ごとの箱は小さくて、とても二人分は入りそうにありません。さてどうしましょう。

一番簡単な解決は、配列をもう一つ用意すること。つまりアドベントカレンダーをもう一個買うことですね。でもアドベントカレンダー、かなり場所を取ります。二つ並べるのはちょっと...。
ここで、定番の手法があります。入れられる大きさに制限のある箱には、「ポインタ」、別の場所を指すデータだけを入れておけばいいのです。そして、その指された場所に、実際のお楽しみを置いておくのです。ということで、今年の年末は、アドベントカレンダーの箱には1つずつ「しょっきだなの2だんめ」や「くつばこのなか」など、場所を書いた紙だけを入れておく予定です。そうして、子どもたちは宝探しをしてお楽しみを見つける、というわけです。
今から12月がくるのが楽しみです。

アドベントカレンダー

一覧ページへ戻る