このページでは,基本情報技術者試験を中心に,アルゴリズムとプログラミング(データ構造)分野の過去問題・サンプル問題・公開問題を掲載しています。配列,リスト,スタック,キュー,木構造など,試験で頻出となるデータ構造のテーマを幅広くカバーしています。
※ まず基礎を確認したい方はこちら
解けなかった問題は,各問題下の【参考】リンクから対応する解説ページを読み,理解した上でもう一度解いてみてください。
(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問7
令和元年度 基本情報技術者試験 秋期 午前 問10
平成25年度 基本情報技術者試験 春期 午前 問7
平成22年度 基本情報技術者試験 秋期 午前 問7
問 10進法で5桁の数 a1 a2 a3 a4 a5 を,ハッシュ法を用いて配列に格納したい。ハッシュ関数を mod(a1+a2+a3+a4+a5,13) とし,求めたハッシュ値に対応する位置の配列要素に格納する場合,54321は配列のどの位置に入るか。ここで,mod(x,13) は,xを13で割った余りとする。
| ア 1 | イ 2 | ウ 7 | エ 11 |
【解答】イ
【解説】
mod(5+4+3+2+1, 13) = mod(15, 13) = 2
平成25年度 基本情報技術者試験 秋期 午前 問7
平成23年度 基本情報技術者試験 秋期 午前 問6
問 次の規則に従って配列の要素 A[0],A[1],…,A[9] に正の整数kを格納する。kとして16,43,73,24,85を順に格納したとき,85が格納される場所はどこか。ここで,x mod y は,xをyで割った剰余を返す。また,配列の要素は全て0に初期化されている。
〔規則〕
(1) A[k mod 10]=0 ならば,kを A[k mod 10] に格納する。
(2) (1)で格納できないとき,A[(k+1) mod 10]=0 ならば,kを A[(k+1) mod 10] に格納する。
(3) (2)で格納できないとき,A[(k+4) mod 10]=0 ならば,kを A[(k+4) mod 10] に格納する。
| ア A[3] | イ A[5] | ウ A[6] | エ A[9] |
【解答】エ
【解説】
k=16:A[16 mod 10]=A[6]
k=43:A[43 mod 10]=A[3]
k=73:A[73 mod 10]=A[3]
⇒ A[(73+1) mod 10]=A[4]
k=24:A[24 mod 10]=A[4]
⇒ A[(24+1) mod 10]=A[5]
k=85:A[85 mod 10]=A[5]
⇒ A[(85+1) mod 10]=A[6]
⇒ A[(85+4) mod 10]=A[9]
平成28年度 基本情報技術者試験 春期 午前 問6
問 2次元の整数型配列aの各要素 a(i, j) の値は,2i + j である。このとき,a(a(1, 1)×2, a(2, 2)+1)の値は幾つか。
| ア 12 | イ 13 | ウ 18 | エ 19 |
【解答】エ
【解説】
a(a(1, 1)×2, a(2, 2)+1)
=a((2×1+1)×2, (2×2+2)+1)
=a(6, 7)
=2×6+7
=19
| 【参考】 | 「データ構造の基礎まとめ(配列とは)」 |
平成27年度 基本情報技術者試験 秋期 午前 問5
問 ポインタを用いた線形リストの特徴のうち,適切なものはどれか。
ア 先頭の要素を根としたn分木で,先頭以外の要素は全て先頭の要素の子である。
イ 配列を用いた場合と比較して,2分探索を効率的に行うことが可能である。
ウ ポインタから次の要素を求めるためにハッシュ関数を用いる。
エ ポインタによって指定されている要素の後ろに,新たな要素を追加する計算量は,要素の個数や位置によらず一定である。
【解答】エ
【解説】
ア,イ 木構造
ウ ポインタは,次のデータの位置を示す情報であり,その値をそのまま参照して次の要素にアクセスする(ハッシュ関数を用いて位置を計算するわけではない)
エ リストで要素の挿入を行う場合は,挿入するデータのポインタに次のデータのアドレスを書き込み,挿入する位置の前のデータのポインタを挿入するデータのアドレスに書き換える ⇒ 計算量は一定
平成21年度 基本情報技術者試験 春期 午前 問6
問 配列と比較した場合の連結リストの特徴に関する記述として,適切なものはどれか。
ア 要素を更新する場合,ポインタを順番にたどるだけなので,処理時間は短い。
イ 要素を削除する場合,削除した要素から後ろにあるすべての要素を前に移動するので,処理時間は長い。
ウ 要素を参照する場合,ランダムにアクセスできるので,処理時間は短い。
エ 要素を挿入する場合,数個のポインタを書き換えるだけなので,処理時間は短い。
【解答】エ
【解説】
ア 連結リストで要素を更新する場合,ポインタを順にたどるので処理時間は長い(配列の場合は添字を指定することで更新するデータに直接アクセスできる)
イ,ウ 配列の特徴
平成24年度 基本情報技術者試験 春期 午前 問7
問 多数のデータが単方向リスト構造で格納されている。このリスト構造には,先頭ポインタとは別に,末尾のデータを指し示す末尾ポインタがある。次の操作のうち,ポインタを参照する回数が最も多いものはどれか。
ア リストの先頭にデータを挿入する。
イ リストの先頭のデータを削除する。
ウ リストの末尾にデータを挿入する。
エ リストの末尾のデータを削除する。
【解答】エ
【解説】
ア 挿入するデータの「次のデータの位置を示すポインタ」に,挿入前の先頭データのアドレスを設定し,その後,先頭ポインタを,挿入するデータのアドレスに変更する ⇒ 先頭ポインタを1回参照(挿入前の先頭データのアドレスを取得)
イ 先頭ポインタを,先頭データの「次のデータの位置を示すポインタ」が指すデータのアドレスに変更する ⇒ 先頭データの「次のデータの位置を示すポインタ」を1回参照
ウ 末尾データの「次のデータの位置を示すポインタ」に,挿入するデータのアドレスを設定し,その後,末尾ポインタを,挿入するデータのアドレスに変更する ⇒ 末尾ポインタを1回参照(挿入前の末尾のデータのアドレスを取得)
エ 先頭ポインタから順にたどり,末尾データの1つ前のデータを見つける。その後,末尾ポインタをそのデータのアドレスに変更し,新しい末尾データの「次のデータの位置を示すポインタ」をNULLにする ⇒ 先頭ポインタから末尾の1つ前のデータに到達するまで,「次のデータの位置を示すポインタ」を順に参照
| 【参考】 | 「データ構造の基礎まとめ(リストとは)」 |
令和5年度 基本情報技術者試験 公開問題 科目A 問2
平成22年度 基本情報技術者試験 春期 午前 問5
問 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタa~fの中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
| ア a,b,e,f | イ a,e,f | ウ a,f | エ b,e |
【解答】ウ
【解説】
追加前のリスト構造は,
である。社員Aと社員Kの間に社員Gを追加すると,リスト構造は,次のようになる。
| 【参考】 | 「データ構造の基礎まとめ(リストとは)」 |
平成29年度 基本情報技術者試験 春期 午前 問4
問 データ構造の一つであるリストは,配列を用いて実現する場合と,ポインタを用いて実現する場合とがある。配列を用いて実現する場合の特徴はどれか。ここで,配列を用いたリストは,配列に要素を連続して格納することによって構成し,ポインタを用いたリストは,要素から次の要素へポインタで連結することによって構成するものとする。
ア 位置を指定して,任意のデータに直接アクセスすることができる。
イ 並んでいるデータの先頭に任意のデータを効率的に挿入することができる。
ウ 任意のデータの参照は効率的ではないが,削除や挿入の操作を効率的に行える。
エ 任意のデータを別の位置に移動する場合,隣接するデータを移動せずにできる。
【解答】ア
【解説】
ア 配列を用いたリストの場合は,添字を指定することで任意のデータに直接アクセスすることができる
イ 配列の先頭に任意のデータを挿入する場合,挿入する位置よりも後ろのデータを1つずつ後ろに移動して,空いた位置にデータを書き込むことになるので効率的ではない
ウ 任意のデータの参照は効率的であるが,削除や挿入の操作をする場合は,データを移動する必要があるため効率的ではない
エ 任意のデータを別の位置に移動する場合,移動対象のデータを一旦退避させ,隣接するデータを空いた位置に順に詰めるように移動する必要がある
平成25年度 基本情報技術者試験 秋期 午前 問6
問 リストは,配列で実現する場合とポインタで実現する場合とがある。リストを配列で実現した場合の特徴として,適切なものはどれか。
ア リストにある実際の要素数にかかわらず,リストの最大長に対応した領域を確保し,実際には使用されない領域が発生する可能性がある。
イ リストにある実際の要素数にかかわらず,リストへの挿入と削除は一定時間で行うことができる。
ウ リストの中間要素を参照するには,リストの先頭から順番に要素をたどっていくので,要素数に比例した時間が必要となる。
エ リストの要素を格納する領域の他に,次の要素を指し示すための領域が別途必要となる。
【解答】ア
【解説】
イ 配列で実現したリストで要素の挿入や削除を行う場合はデータを移動する必要があるため,移動する要素の数が多いほど時間がかかる
ウ 配列で実現したリストの場合は,添字を指定することで任意のデータに直接アクセスすることができるので,参照する時間は一定である
エ 配列で実現したリストの場合は,先頭から順に要素を格納するので,次の要素を指し示すための領域は必要ない
平成30年度 基本情報技術者試験 春期 午前 問6
問 リストを二つの1次元配列で実現する。配列要素 box[ i ] と next[ i ] の対がリストの一つの要素に対応し,box[ i ] に要素の値が入り,next[ i ] に次の要素の番号が入る。配列が図の状態の場合,リストの3番目と4番目との間に値がHである要素を挿入したときの next[ 8 ] の値はどれか。ここで,next[ 0 ] がリストの先頭(1番目)の要素を指し,next[ i ] の値が0である要素はリストの最後を示し,next[ i ] の値が空白である要素はリストに連結されていない。
| ア 3 | イ 5 | ウ 7 | エ 8 |
【解答】ウ
【解説】
値がHである要素を追加する前のリスト構造は,
である。このリストの3番目と4番目との間に値がHである要素を挿入すると,リスト構造は,次のようになる。
| 【参考】 | 「データ構造の基礎まとめ(リストとは)」 |
平成27年度 基本情報技術者試験 春期 午前 問5
問 キューに関する記述として,最も適切なものはどれか。
ア 最後に格納されたデータが最初に取り出される。
イ 最初に格納されたデータが最初に取り出される。
ウ 添字を用いて特定のデータを参照する。
エ 二つ以上のポインタを用いてデータの階層関係を表現する。
【解答】イ
【解説】
■ キュー
先に格納したデータを先に取り出す,先入れ先出しの性質を持つデータ構造である。
※ キューは,待ち行列とも呼ばれる
※ 先入れ先出し…FIFO(First In First Out)
- エンキュー(ENQ:enqueue)… キューにデータを格納すること
- デキュー(DEQ:dequeue)… キューからデータを取り出すこと
ア 後入れ先出し ⇒ スタック
ウ 配列
エ リスト
平成30年度 基本情報技術者試験 秋期 午前 問5
平成25年度 基本情報技術者試験 秋期 午前 問5
問 待ち行列に対する操作を,次のとおり定義する。
ENQ n :待ち行列にデータnを挿入する。
DEQ :待ち行列からデータを取り出す。
空の待ち行列に対し,ENQ 1,ENQ 2,ENQ 3,DEQ,ENQ 4,ENQ 5,DEQ,ENQ 6,DEQ,DEQ の操作を行った。次に DEQ 操作を行ったとき,取り出されるデータはどれか。
| ア 1 | イ 2 | ウ 5 | エ 6 |
【解答】ウ
【解説】
空の待ち行列に対し,ENQ 1,ENQ 2,ENQ 3,DEQ,ENQ 4,ENQ 5,DEQ,ENQ 6,DEQ,DEQ の操作を行うと,次のようになる。
よって,次に DEQ 操作を行ったときに,取り出されるデータは,
5
となる。
| 【参考】 | 「データ構造の基礎まとめ(キューとは)」 |
平成30年度 基本情報技術者試験 春期 午前 問5
問 次の二つのスタック操作を定義する。
PUSH n :スタックにデータ(整数値n)をプッシュする。
POP :スタックからデータをポップする。
空のスタックに対して,次の順序でスタック操作を行った結果はどれか。
PUSH 1 → PUSH 5 → POP → PUSH 7 → PUSH 6 → PUSH 4 → POP → POP → PUSH 3
| ア | イ | ウ | エ |
【解答】ウ
【解説】
空のスタックに対し,PUSH 1 → PUSH 5 → POP → PUSH 7 → PUSH 6 → PUSH 4 → POP → POP → PUSH 3 の操作を行うと,次のようになる。
| 【参考】 | 「データ構造の基礎まとめ(スタックとは)」 |
平成21年度 基本情報技術者試験 秋期 午前 問5
問 空のスタックに対して次の操作を行った場合,スタックに残っているデータはどれか。ここで,“push x” はスタックへデータxを格納し,“pop” はスタックからデータを取り出す操作を表す。
push 1 → push 2 → pop→ push 3 → push 4 → pop → push 5 → pop
| ア 1と3 | イ 2と4 | ウ 2と5 | エ 4と5 |
【解答】ア
【解説】
空のスタックに対し,push 1 → push 2 → pop→ push 3 → push 4 → pop → push 5 → pop の操作を行うと,次のようになる。
| 【参考】 | 「データ構造の基礎まとめ(スタックとは)」 |
平成29年度 基本情報技術者試験 秋期 午前 問5
平成22年度 基本情報技術者試験 秋期 午前 問5
問 A,B,C,Dの順に到着するデータに対して,一つのスタックだけを用いて出力可能なデータ列はどれか。
| ア A,D,B,C | イ B,D,A,C |
| ウ C,B,D,A | エ D,C,A,B |
【解答】ウ
【解説】
各選択肢を順に調べればよい。
ア
イ
ウ
エ
| 【参考】 | 「データ構造の基礎まとめ(スタックとは)」 |
平成23年度 基本情報技術者試験 秋期 午前 問5
問 スタック1,2があり,図の状態になっている。関数fはスタック1からポップしたデータをそのままスタック2にプッシュする。関数gはスタック2からポップしたデータを出力する。b,c,d,aの順番に出力するためには,関数をどの順で実行すればよいか。
| ア f,f,g,f,f,g,g,g | イ f,f,g,f,g,f,g,g |
| ウ f,f,g,f,g,g,f,g | エ f,f,g,g,f,f,g,g |
【解答】イ
【解説】
各選択肢を順に調べればよい。
ア
イ
ウ
エ
| 【参考】 | 「データ構造の基礎まとめ(スタックとは)」 |
令和元年度 基本情報技術者試験 秋期 午前 問8
問 A,C,K,S,Tの順に文字が入力される。スタックを利用して,S,T,A,C,K という順に文字を出力するために,最小限必要となるスタックは何個か。ここで,どのスタックにおいてもポップ操作が実行されたときには必ず文字を出力する。また,スタック間の文字の移動は行わない。
| ア 1 | イ 2 | ウ 3 | エ 4 |
【解答】ウ
【解説】
S,T,A,C,K という順に文字を出力するように操作を行うと,次のようになる。
| 【参考】 | 「データ構造の基礎まとめ(スタックとは)」 |
平成21年度 基本情報技術者試験 春期 午前 問5
問 関数や手続を呼び出す際に,戻り番地や処理途中のデータを一時的に保存するのに適したデータ構造はどれか。
| ア 2分探索木 | イ キュー |
| ウ スタック | エ 双方向連結リスト |
【解答】ウ
【解説】
■ スタック
後に格納したデータを先に取り出す,後入れ先出しの性質を持つデータ構造である。
※ 後入れ先出し…LIFO(Last In First Out)
- プッシュ(push)…スタックにデータを格納すること
- ポップ(pop)…スタックからデータを取り出すこと
ウ メイン処理から副プログラムを呼び出す際に,メイン処理へ戻るためのアドレスや変数の値などを一時的に保存できる
平成26年度 基本情報技術者試験 秋期 午前 問5
問 加減乗除を組み合わせた計算式の処理において,スタックを利用するのが適している処理はどれか。
ア 格納された計算の途中結果を,格納された順番に取り出す処理
イ 計算の途中結果を格納し,別の計算を行った後で,その計算結果と途中結果との計算を行う処理
ウ 昇順に並べられた計算の途中結果のうち,中間にある途中結果だけを変更する処理
エ リストの中間にある計算の途中結果に対して,新たな途中結果の挿入を行う処理
【解答】イ
【解説】
■ スタック
後に格納したデータを先に取り出す,後入れ先出しの性質を持つデータ構造である。
※ 後入れ先出し…LIFO(Last In First Out)
- プッシュ(push)…スタックにデータを格納すること
- ポップ(pop)…スタックからデータを取り出すこと
ア,ウ,エ スタックを利用する場合は,計算の途中結果を,格納された順番に取り出したり,中間にある計算結果を取り出したりすることはできない
| 【参考】 | 「データ構造の基礎まとめ(スタックとは)」 |
平成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(5),f(4),f(7),g(),g()の順に実行した場合の配列Aは次のようになる。
平成26年度 基本情報技術者試験 春期 午前 問7
問 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,手続で引用している関数は,次のとおりとする。
〔関数の定義〕
push(y):データyをスタックに積む。
pop():データをスタックから取り出して,その値を返す。
enq(y):データyをキューに挿入する。
deq():データをキューから取り出して,その値を返す。
〔手続〕
push(a)
push(b)
enq(pop())
enq(c)
push(d)
push(deq())
x ← pop()
| ア a | イ b | ウ c | エ d |
【解答】イ
【解説】
手続を順に実行すると,次のようになる。
平成24年度 基本情報技術者試験 秋期 午前 問5
問 四つのデータ A,B,C,D がこの順に入っているキューと空のスタックがある。手続 pop_enq,deq_push を使ってキューの中のデータを D,C,B,A の順に並べ替えるとき,deq_push の実行回数は最小で何回か。ここで,pop_enq はスタックから取り出したデータをキューに入れる操作であり,deq_push はキューから取り出したデータをスタックに入れる操作である。
| ア 2 | イ 3 | ウ 4 | エ 5 |
【解答】イ
【解説】
四つのデータ A,B,C,D を D,C,B,A の順に並べ替える操作は,次のようになる。
平成31年度 基本情報技術者試験 春期 午前 問5
問 2分探索木として適切なものはどれか。ここで,数字1~9は,各ノード(節)の値を表す。
| ア | イ |
| ウ | エ |
【解答】イ
【解説】
■ 2分探索木
データの探索に適したデータ構造で,「左の子の値<節の値<右の子の値」という大小関係を持っている。
イ 「左の子の値<節の値<右の子の値」という大小関係になっている。
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
(令和4年度) 基本情報技術者試験 サンプル問題 科目A 問5
平成28年度 基本情報技術者試験 秋期 午前 問6
問 2分探索木になっている2分木はどれか。
| ア | イ |
| ウ | エ |
【解答】イ
【解説】
■ 2分探索木
データの探索に適したデータ構造で,「左の子の値<節の値<右の子の値」という大小関係を持っている。
イ 「左の子の値<節の値<右の子の値」という大小関係になっている。
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
令和7年度 基本情報技術者試験 公開問題 科目A 問03
問 図の木構造は2分探索木である。a~gの値の大小関係として,適切なものはどれか。ここで,a~gの値は重複しないものとする。
| ア a < b < d < e < c < f < g | イ d < b < e < a < f < c < g |
| ウ d < e < f < g < b < c < a | エ g < f < c < e < d < b < a |
【解答】イ
【解説】
■ 2分探索木
データの探索に適したデータ構造で,「左の子の値<節の値<右の子の値」という大小関係を持っている。
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
平成23年度 基本情報技術者試験 特別 午前 問5
問 空の2分探索木に,8,12,5,3,10,7,6 の順にデータを与えたときにできる2分探索木はどれか。
| ア | イ |
| ウ | エ |
【解答】エ
【解説】
「左の子の値<節の値<右の子の値」という要素同士の大小関係を保つように,順にデータを追加する。
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
平成28年度 基本情報技術者試験 春期 午前 問5
問 10個の節(ノード)から成る次の2分木の各節に,1から10までの値を一意に対応するように割り振ったとき,節a,bの値の組合せはどれになるか。ここで,各節に割り振る値は,左の子及びその子孫に割り振る値よりも大きく,右の子及びその子孫に割り振る値よりも小さくするものとする。
| ア a=6,b=7 | イ a=6,b=8 |
| ウ a=7,b=8 | エ a=7,b=9 |
【解答】ア
【解説】
1から10までの値を,左の子及びその子孫に割り振る値よりも大きく,右の子及びその子孫に割り振る値よりも小さく割り当てると,次のようになる。
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
平成22年度 基本情報技術者試験 秋期 午前 問6
問 節点 1,2,…,n をもつ木を表現するために,大きさnの整数型配列 A[1],A[2],…,A[n] を用意して,節点iの親の番号をA[i]に格納する。節点kが根の場合は A[k]=0 とする。表に示す配列が表す木の葉の数は,幾つか。
| ア 1 | イ 3 | ウ 5 | エ 7 |
【解答】ウ
【解説】
節点1が根で,節点2と節点3は節点1が親,節点4と節点5は節点3が親,節点6と節点7と節点8は節点5が親なので,これを描くと次のようになる。
よって,葉の数は,
5つ(要素2,要素4,要素6,要素7,要素8)
となる。
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
平成25年度 基本情報技術者試験 春期 午前 問5
問 次の2分探索木から要素12を削除したとき,その位置に別の要素を移動するだけで2分探索木を再構成するには,削除された要素の位置にどの要素を移動すればよいか。
| ア 9 | イ 10 | ウ 13 | エ 14 |
【解答】ウ
【解説】
要素12を削除後,要素同士の大小関係を保つためには,要素12の位置に要素11,または,要素13を移動する(選択肢には11はないので13を移動する)。
【参考】
・要素11を移動した場合
| 【参考】 | 「データ構造の基礎まとめ(木構造とは)」 |
まとめ
今回は,基本情報技術者試験の過去問題・サンプル問題・公開問題のうち,アルゴリズムとプログラミング(データ構造)分野に関するものを集め,シンプルにまとめてみました。みなさんは,どのくらい解けましたか?はじめは,それぞれのデータ構造の特徴や用途を覚えるだけでも大変に感じるかもしれません。しかし,問題演習を繰り返すことで,「どの場面でどのデータ構造を使うのか」が自然と理解できるようになります。8割以上(できれば9割以上)解けるようになることを目標に,ぜひ取り組んでみてください。また,一度解けるようになっても,時間が経つと忘れてしまうことがあります。1週間後や1か月後など,期間をあけてもう一度解き直すことで,知識の定着につながると思います。
基本情報技術者試験の学習におすすめの問題集・参考書
過去問演習や苦手分野の復習に役立つ、おすすめの問題集・参考書です。
学習のお役に立ちましたら
この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。
よろしければ、このサイトを応援いただけますと嬉しいです。
※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

