2012年5月28日月曜日

=== 平成24年春 問6 ===


平成24年春目次  前の問題  次の問題

問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;
}

ア キュー     イ スタック
ウ ハッシュ    エ ヒープ



解説

f(x)では、配列にデータを入れる作業をしており、g()では、配列からデータを取り出す作業をしている。
f(x)を3回呼び出すとどんなことが起きるか、考えてみよう。
pは初期値0であるから、1回目の呼び出しではp=1となり、A[1]にデータが格納される。
2回目にはp=2となり、A[2]にデータが格納される。
3回目にはp=3となり、A[3]にデータが格納される。

では、この後、3回 g()を呼び出したとすると、どうなるだろう。
今、p=3となっているので、A[3]の値が取り出され、p=2となる。
次にA[2]の値が取り出され、p=1となる。
その次は、A[1]の値が取り出され、p=0となる。

このようにみてみると、取り出される値は、1番最後に入れたデータとなる。(Last In First Out)
ということなので、これはスタックとなる。





0 件のコメント:

コメントを投稿