パソコン素人です。
データ構造素人です。
基本情報技術者試験の問題・テキスト等を見て気になったメモです。
多分間違っているのであまり見ないで下さい。すみません。
今回は、「データ構造」って何という疑問です。(今回は多分、明らかに?間違いあり。)
(とりあえず、あまり関係ないですが、問題を載せておきます。)
**********************************************
基本情報技術者平成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年版)
を読むと、「データの基本構造は、配列です。配列の使い方を工夫することで、
リスト、二分探索木、ヒープ、キュー、スタックなどのデータ構造が実現されます」とある。
基本は配列と考えればいいのか(な)。
上記では間違った理解をしていたのかもしれない。
反省。