修了試験 2016-06-12実施分 基本情報技術者試験 問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とgがどの順序でデータを出し入れしているかを読み取る問題です。 f(x)は、pを1増やしてからA[p]にxを格納します。 g()は、A[p]の値を取り出してから、pを1減らします。 例えば、f(10)、f(20)と実行すると、A[1]=10、A[2]=20、p=2になります。 ここでg()を実行すると、A[2]の20が返り、pは1になります。 つまり、最後に格納したデータが最初に取り出されます。 これは後入れ先出し(LIFO:Last In First Out)であり、スタックの動作です。 【選択肢別解説】 1:× キューは先入れ先出し(FIFO)で、最初に格納したデータから取り出します。 2:○ fがプッシュ、gがポップに当たり、後入れ先出しのスタックです。 3:× ハッシュは、キー値から関数で格納位置を計算する方法で、本問の操作とは異なります。 4:× ヒープは、親が子以上(または以下)の値をもつ木構造で、最大値や最小値を取り出す構造です。 【ポイント】 スタックは1つの添字で出し入れし、キューは先頭と末尾の2つの位置を管理します。 変数がpの1つだけであることも、スタックを見抜く手掛かりになります。まとめて解く
修了試験 2016-06-12実施分を通しで解く(80問)→