十分な大きさの配列Aと初期値が0の変数pに対して,関数ƒ(x)とg()が次のとおり定義されている。
配列Aと変数pは,関数ƒ(x)とg()だけでアクセス可能である。
これらの関数が操作するデータ構造はどれか。
function ƒ(x) {
p=p+1;
A[p]=x;
return None;
}
function g() {
x=A[p];
p=p-1;
return x;
}
p=p+1;
A[p]=x;
return None;
}
function g() {
x=A[p];
p=p-1;
return x;
}
×不正解です
関数ƒは変数pの値を1増やし、その位置に引数として与えられた値xを格納します。つまり、ƒ(x)を実行する度に、配列の末尾に要素が追加されることになります。
関数gは、現在の配列の末尾の要素を取得し、その後、変数pの値を1減らします。これにより、配列の末尾から要素が取り出されることになります。
これらの操作を考慮すると、配列Aは後入れ先出し(LIFO)の動作を実現していることが分かります。
この特徴は、スタックというデータ構造の特徴です。
スタックは、最後に追加された要素が最初に取り出される構造であり、本問題で示された操作そのものです。
- ア: キューは先入れ先出し(FIFO)のデータ構造です。つまり、最初に追加された要素が最初に取り出されます。本問題では、直近に追加された要素が先に取り出されるため、キューの特性とは一致しません。
- イ: スタックは後入れ先出し(LIFO)のデータ構造です。ƒ(x)とg()の働きにより、後から追加した要素が先に取り出される動作が再現されており、これはまさにスタックの動作特性です。
- ウ: ハッシュは固定長の一意のデータを生成するためのデータ構造です。ƒ(x)とg()の動作とは性質が異なります。
- エ: ヒープは、親の値が子の値よりも大きいか等しい制約のある木構造で、優先順位の管理などで使用されます。これも、本問題のƒ(x)とg()の動作には関連しません。
回答数 0
正解率 0%