配列を使ったスタックの表現

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ザラメさん  
(No.1)
今大滝本で科目Bの勉強中なのですが、「スタックの最上段位置(データを格納する要素位置)を示す変数topを使ってプッシュとポップを行う」
変数topに初期値1を設定し、topの示す要素位置データを入れ、入れた後にtopの値を+1する
取り出すときは-1してから取り出す  とありますが  何故+1するのでしょうか?
一度データを入れた要素位置には別のデータを入れられないから(一つの要素につきひとつまで
)なのでしょうか
分かりにくくて申し訳ないですが、教えていただけると幸いです。
2024.02.20 15:47
タマルさん 
(No.2)
今手元に大滝本がありませんので想像ですが、topが1の場合、スタックに"A"という文字をpushすると
1: "A"
さらに次の値をpushするために、あらかじめtopに1を足して2にしておきます。

ここで"B"という文字をpushすると、topである2の位置に入ります。
2: "B"
1: "A"
次のためにtopに1を足して3にしておきます。

もし"C"という文字をpushすると3の位置に入ります。
3: "C"
2: "B"
1: "A"
topに1を足して4にしておきます。

上の"C"のpushをせずに、popするのであれば、topは3ですので1を引いて 2の位置から"B"が取り出されます。
1: "A"
この時、topは2です。
2024.02.20 16:48
jjon-comさん 
FE ゴールドマイスター
(No.3)
変数topの値が変化せずいつも同じ要素位置を指しているのであれば,そのスタックに格納できるデータ数は1個のみです。(それをスタックと呼ぶかどうかは別問題として)

> 一度データを入れた要素位置には別のデータを入れられないから
> (一つの要素につきひとつまで)なのでしょうか

電子データですから,別のデータを代入できます。しかし,元々格納されていたデータは上書きされて消えます。
2024.02.21 08:56
ザラメさん  
(No.4)
お二人ともご丁寧な解説ありがとうございます。データを格納するには+1してずらしながら入れているということですね。
最後のCをpushせずにpopするという説明も理解できましたが、そうなると
3:"C"

1:"A"      になりますよね(合ってるでしょうか...)
2024.02.21 10:41
jjon-comさん 
FE ゴールドマイスター
(No.5)
stackデータ構造(積み重ねたもの)に対する操作は基本的に次の2つであり,

push(平積みされた本の最上段に本を1冊 乗せる)
 pop(平積みされた本の最上段から本を1冊 取る)

平積みの本の途中から本を抜き取る,という操作は存在しません。
(例外的にその操作が存在するのなら必ず説明があるはずです)

----
No.2 で言っていることは,

次の【状態1】において
(topは「(次に)データを格納する要素位置」を指しています)
3:      ←top
2: "B"
1: "A"

"C"をpushすると次の状態になり,
4:      ←top
3: "C"
2: "B"
1: "A"

【状態1】の状態から
> 上の"C"のpushをせずに、popするのであれば、
次の状態になるということです。
2:      ←top
1: "A"
2024.02.21 12:01
ザラメさん  
(No.6)
ようやく理解できました泣  わざわざ例題まで作って説明してくださって、ありがとうございました。
2024.02.21 15:38

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop