基本情報技術者試験な備忘録(データ構造って)

パソコン素人です。
データ構造素人です。

基本情報技術者試験の問題・テキスト等を見て気になったメモです。
多分間違っているのであまり見ないで下さい。すみません。


今回は、「データ構造」って何という疑問です。(今回は多分、明らかに?間違いあり。)


(とりあえず、あまり関係ないですが、問題を載せておきます。)

**********************************************
基本情報技術者平成24年春期 午前問6

十分な大きさの配列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;
}

これの答えは「スタック」です。
後入れ先出し(LIFO)のデータ構造(先入れ後出し)

 

*******************************************
素朴に、疑問。
「単純な配列」があって、
それを後入れ先出し(LIFO)で操作することで、
それを「スタック」というデータ構造というのかと疑問に思った。
(上の2つのfunctionで入りと出のスタックのルールを適用しているだけでは?)


上記の同じ配列でも、
先入れ先出し(FIFO)の操作できるのではないかなと。
それができると、同じ配列を「キュー」のデータ構造というのかな?

・・・上記の素朴な疑問だが、キューとスタックは同じ配列でできるような気がする。
(実際作っていないがネットで、pythonのコードとか見てるとそう思えます。)

 

--------------------------
参考書では、
データ構造には、「配列」「リスト」「二分探索木」「ヒープ」「キュー」「スタック」のように
それぞれデータ構造があるように記載している。※追記(多分理解が違った・・・)

説明では、それぞれ、特徴があり、同じようには見えない。
で、それぞれ、操作するのに、それぞれアルゴリズム(プログラム)を用いて、
追加や取り出しなど行うのだろう。

 


関係ないかもしれないが、データベースの型には、
①階層型(親ノード・子ノード)
②ネットワーク型(グラフデータベース?ノード、エッジ、プロパティ。SNSで使う?)
③リレーショナルデータベース(表形式、SQL、論理演算)
などがある(ようだ)。
上記のデータ構造も大まかに分かれるのかもしれない。
「配列」「キュー」「スタック」

「リスト」

「二分探索木」「ヒープ」

分かっていない。全くの素人だな。反省。


追記:※
参考書(翔泳社 出るとこだけ!基本情報技術者テキスト&問題集科目A科目B2023年版)
を読むと、「データの基本構造は、配列です。配列の使い方を工夫することで、
リスト、二分探索木、ヒープ、キュー、スタックなどのデータ構造が実現されます」とある。
基本は配列と考えればいいのか(な)。
上記では間違った理解をしていたのかもしれない。
反省。