HOME»基本情報技術者試験掲示板»配列を使ったスタックの表現
投稿する

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

 ザラメさん(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さん(No.3) 
FE ゴールドマイスター
変数topの値が変化せずいつも同じ要素位置を指しているのであれば,そのスタックに格納できるデータ数は1個のみです。(それをスタックと呼ぶかどうかは別問題として)

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

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

1:"A"      になりますよね(合ってるでしょうか...)
2024.02.21 10:41
jjon-comさん(No.5) 
FE ゴールドマイスター
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日経過したスレッドへの投稿はできません。
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop