アルゴリズムとデータ構造(スタック・キュー)【ITパスポート講座】

ITパスポート アルゴリズムとデータ構造

この記事で学ぶこと

  1. アルゴリズムとデータ構造について
  2. フローチャートの概要
  3. スタックとキュー

今回はITパスポートで問われるアルゴリズムとデータ構造について学習します。

くろん
くろん
コンピュータって、具体的にどうやって処理しているにゃ?
モナ
モナ
コンピュータの処理を理解するためには、アルゴリズムとデータ構造を学ぶ必要があるニャ!

アルゴリズムとデータ構造

ITパスポート アルゴリズム

アルゴリズムとは、問題を解決するための「考え方」や「やり方」のことです。

モナ
モナ
スタートからゴールまでの道のりと考えても問題ないニャ!

アルゴリズムはフローチャートと呼ばれる図で示すとわかりやすくなります。例えば以下の例題を通して確認してみましょう。

1~6までが書かれたサイコロがある。奇数が出るまで延々とサイコロを振り続ける処理を行いたい。
くろん
くろん
言ってることは簡単そうだけど、実際どうやって実装するにゃ?

例題の処理をフローチャートに示すと、以下のようになります。

ITパスポート フローチャート

フローチャートの記号はJIS(日本産業規格)で規格化されているので、覚えておきましょう。

図・記号 名称 意味
フローチャート 端 プログラムの「始まり」と「終わり」を示す
フローチャート 処理 処理 「入力」「記憶」「演算」「出力」の処理を示す
フローチャート 判断 判断 「分岐」や「繰り返し」を示す
フローチャート ループ開始 ループ開始 「繰り返し」の始まりを示す
フローチャート ループ終了 ループ終了 「繰り返し」の終わりを示す
キュー
キュー
他にもあるけど、ひとまずは例に示したものだけ覚えておけば問題ないで

変数とは

変数は、データを格納する箱と表現されます。

数学でも「x」や「y」を変数として扱いますが、プログラムにおいても同様に、値を格納するための領域に名前を付けて変数として扱います。

モナ
モナ
例えばx=10なら、xに10を代入(格納)するイメージだニャ!

代入の表現はプログラム言語によってまちまちですが、「x ← 10」や「x = 10」と記載します。

キュー
キュー
参考までに、この後xに別の数字(例えば3)を代入すると、元の10は消えるで

変数には計算結果を代入するケースもあります。

例えば変数を「x」「y」「z」と3つ用意し、「x = 10」「y = 5」「z = x + y」とすれば「z」は「x」と「y」の加算結果を代入することになります。

Advice
元の変数を利用する場合、「x = x + 1」のように記載することがあります。中学校で学ぶ方程式とは異なるので、違いを押さえておきましょう。

配列とは

プログラムで数個のデータを扱うケースを考えてみましょう。

モナ
モナ
例えばクラス10人の成績を格納する場合を考えてみるニャ!

複数のデータをまとめて扱う場合、配列と言う考え方を用います。配列は同じ名前で番号(添字)によって区別する方法です。

10人の成績を格納する変数は、A[0]~A[9]のようにあらわします。

くろん
くろん
なんで[0]から始まるにゃ?
キュー
キュー
メモリのコンピュータの処理上、割り当てが0番目から始まるからや。この考え方を0インデックスと呼ぶで
Attention!!
問題によっては配列の先頭要素が1から始まるケースもあります。しっかりと問題を読みましょう。

プログラムの制御構造

全てのプログラムは、以下の3構造からできています。

順次

ITパスポート 順次

順次処理は文字通り、StartからEndまで順番に実行します。

選択(分岐)

ITパスポート 選択(分岐)

選択(分岐)処理は、条件が真(YES)か、偽(NO)で処理が分かれます。

繰り返し(ループ)

ITパスポート 繰り返し(ループ)

繰り返し(ループ)処理は、ある条件の間処理を繰り返します。

ループに入る前に判断する繰り返し処理を前判定と言います。一方で、ループ終了時に終了条件を書くことを後判定と呼びます。

データ構造

アルゴリズム同様に重要な考え方として、データ構造が挙げられます。

コンピュータは大量のデータを扱うため、どのようにデータを配置するか考える必要があります。

具体的なデータ構造として、キューとスタックを紹介します。

キュー

ITパスポート キュー

キューは待ち行列とも言われます。銀行のATMやスーパーのレジのように一番後ろに並び、古い順に処理されることからFIFO(First In First Out)とも呼ばれます。

キュー
キュー
呼ばれた気がする
モナ
モナ
お呼びでないニャ

スタック

ITパスポート スタック

スタックは最後に入れたものが最初に処理されることから、LIFO(Last In First Out)とも呼ばれます。

処理すべき書類や本が積み重ねられ、新しく入ったものが先に処理されるイメージです。

データをスタックへ格納することをPUSH(プッシュ)、取り出すことをPOP(ポップ)と呼びます。

くろん
くろん
POPはメールを取り出すプロトコルとしてもあったにゃ!(※POP3)
スポンサーリンク

アルゴリズムとデータ構造の例題

実際に例題を解いて問題に慣れていきましょう。

問1

流れ図Xで示す処理では,変数 i の値が,1→3→7→13と変化し,流れ図Yで示す処理では,変数 i の値が,1→5→13→25と変化した。図中のa,bに入れる字句の適切な組合せはどれか。(R.3/問74)

a b
2i + k k:1,3,7
2i + k k:2,2,6
i + 2k k:1,3,7
i + 2k k:2,2,6




(ログイン後回答すると、ここに前回の正誤情報が表示されます)

問1の正解を表示
問1の解説を表示

まずは流れ図Xから、aの値を考えましょう。

“変換”とループ端に書いてある”k:1,1,3″は繰返し条件です。

(注)に従うと以下が分かります。

  • 変数名がk
  • kの初期値が1
  • 増分が1
  • 終値が3

文として表現すると「k=1からk=3まで1ずつ増やしながら繰り返す」となります。したがって、実際の処理は以下の通りです。

流れ図Xの処理の流れ
  1. kに1を格納する
  2. i=1,k=1 として、iに a=3 を格納する
  3. i=3,k=2 として、iに a=7 を格納する
  4. i=7,k=3 として、iに a=13 を格納する

これより、i=7,k=3の時を考えると、”2i+k”の場合結果は17、”i+2k”の場合結果が13より、a=”i+2k”となります。

次に流れ図Yから、bの値を考えましょう。a=”i+2k”を考慮すると、流れ図Yの処理は以下の通りです。

流れ図Yの処理の流れ
  1. iに1を格納する
  2. i=1 として、iに 1+2k=5 を格納する
  3. i=3 として、iに 5+2k=13 を格納する
  4. i=7 として、iに 13+2k=25 を格納する

iを求める式より、1回目のループではk=2、2回目のループではk=4、3回目のループではk=6と、2ずつ増加しながら繰り返していることが分かります。

したがって、b=”k:2,2,6″となります。

a=”i+2k”、b=”k:2,2,6″より、「エ」が正解です。

問2

先入れ先出し処理を行うのに適したキューと呼ばれるデータ構造に対して”8″,”1″, “6”,”3″の順に値を格納してから,取出しを続けて2回行った。2回目の取出しで得られる値はどれか。(H.30春/問96)

ア:1
イ:3
ウ:6
エ:8

(ログイン後回答すると、ここに前回の正誤情報が表示されます)

問2の正解を表示
問2の解説を表示

キューは先入れ先出し処理でデータを保持するデータ構造です。

データの格納順は”8″,”1″, “6”,”3″の順で格納するため、取り出し順も”8″,”1″, “6”,”3″です。

したがって、2番目の取出しで得られる値は、2番目にキューに格納された1で「ア」が正解です。

問3

複数のデータが格納されているスタックからのデータの取出し方として,適切なものはどれか。(H.30秋/問76)

ア:格納された順序に関係なく指定された任意の場所のデータを取り出す。
イ:最後に格納されたデータを最初に取り出す。
ウ:最初に格納されたデータを最初に取り出す。
エ:データがキーをもっており,キーの優先度のデータを取り出す。

(ログイン後回答すると、ここに前回の正誤情報が表示されます)

問3の正解を表示
問3の解説を表示

各選択肢を確認しましょう。

ア:格納された順序に関係なく指定された任意の場所のデータを取り出す。
⇒スタックは任意の場所のデータを取り出せません。したがって誤りです。

イ:最後に格納されたデータを最初に取り出す。
⇒スタックの説明です。したがって正解です。

ウ:最初に格納されたデータを最初に取り出す。
⇒キューの説明です。したがって誤りです。

エ:データがキーをもっており,キーの優先度のデータを取り出す。
⇒スタックに格納されたデータはキーを持っていません。したがって誤りです。

スタックは、後入れ先出しのデータ構造としてデータを管理するものです。

スタックはデータの格納をPUSH、データの取り出しをPOPで行います。

スタックは後入れ先出し構造のため、最後に格納したデータを最初に取り出すことになります。したがって「イ」が正解です。

アルゴリズムとデータ構造のまとめ

今回はアルゴリズムとデータ構造について学習しました。

アルゴリズムとデータ構造はプログラミングを考える基礎になるため押さえておきましょう。

モナ
モナ
本格的にプログラミングを学ぶ前に、流れやデータ構造は押さえておくニャ!

次回はプログラミングについて学習します。


本気でIパスを狙うなら・・・
スタディングがおすすめです!
  • お手頃価格で受講しやすい!
  • スマホ一台でどこでも勉強できる
  • AI問題演習機能で苦手な問題を効率よく学習!

オンライン資格講座 スタディング


スポンサーリンク