修了試験 2021-12-12実施分 基本情報技術者試験 問7
十分な大きさの配列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)とg()の動きから、配列Aと変数pが表すデータ構造を判定する問題です。 f(x)はpを1増やしてからA[p]にxを格納します。 g()はA[p]を取り出してからpを1減らします。 【選択肢別解説】 1:× キューは先に入れたデータを先に取り出すFIFO(First In First Out)構造です。 g()は最後に格納したA[p]を取り出すので、キューではありません。 2:○ f(x)で1、2、3の順に格納するとpは3になり、g()はまずA[3]の3を返します。 最後に入れたデータを最初に取り出すLIFO(Last In First Out)なので、スタックです。 pはスタックの頂上を指すスタックポインタに当たります。 3:× ハッシュはキー値から計算したハッシュ値で格納位置を決める方式です。 f(x)はxの値に関係なく次の位置へ格納しているので、ハッシュではありません。 4:× ヒープは親の値が子の値以上(または以下)という条件を保つ木構造です。 f(x)とg()には要素を比較して並べ替える処理がないので、ヒープではありません。 【ポイント】 f(x)はプッシュ(push)、g()はポップ(pop)に当たります。 キューなら、取出し位置と格納位置を別々の変数で管理する必要があります。まとめて解く
修了試験 2021-12-12実施分を通しで解く(80問)→