修了試験 2017-12-10実施分 基本情報技術者試験 問6
十分な大きさの配列Aと初期値が0の変数pに対して,関数f(x)とg()が次のとおり定義されている。 配列Aと変数pは,関数f(x)とg()だけでアクセスが可能である。 これらの関数が操作するデータ構造はどれか。 function f(x) { p = p+1; A[p] = x; return None; } function g() { x = A[p]; p = p-1; return x; }
正答2
解説
正解は2です。 関数f(x)は、pを1増やしてからA[p]にxを格納します。 関数g()は、A[p]の値を取り出してからpを1減らします。 pは常に「最後に格納した位置」を指しているので、g()は最も新しく格納したデータを取り出すことになります。 【選択肢別解説】 1:× キューは先入れ先出し(FIFO:First-In First-Out)で、最も古いデータから取り出します。 g()は最も新しいデータを取り出すので該当しません。 2:○ 後から入れたデータを先に取り出す後入れ先出し(LIFO:Last-In First-Out)の構造です。 f(x)がプッシュ、g()がポップに当たり、スタックの動作そのものです。 3:× ハッシュは、キーからハッシュ関数で格納位置を計算するデータ構造です。 f(x)とg()は位置を計算しておらず、該当しません。 4:× ヒープは、親が子以上(または以下)という大小関係を保つ木構造です。 値の比較や並べ替えを行っていないので該当しません。 【ポイント】 例としてf(1)、f(2)、f(3)の順に呼ぶと、pは3になります。 その後g()を呼ぶと3が返り、続けて呼ぶと2、1の順に返ります。 変数pはスタックポインタの役割をしています。まとめて解く
修了試験 2017-12-10実施分を通しで解く(80問)→