HOME»基本情報技術者試験掲示板»配列を使ったスタックの表現
投稿する
配列を使ったスタックの表現 [5323]
ザラメさん(No.1)
今大滝本で科目Bの勉強中なのですが、「スタックの最上段位置(データを格納する要素位置)を示す変数topを使ってプッシュとポップを行う」
変数topに初期値1を設定し、topの示す要素位置データを入れ、入れた後にtopの値を+1する
取り出すときは-1してから取り出す とありますが 何故+1するのでしょうか?
一度データを入れた要素位置には別のデータを入れられないから(一つの要素につきひとつまで
)なのでしょうか
分かりにくくて申し訳ないですが、教えていただけると幸いです。
変数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です。
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" になりますよね(合ってるでしょうか...)
最後の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は「(次に)データを格納する要素位置」を指しています)
"C"をpushすると次の状態になり,
【状態1】の状態から
次の状態になるということです。
push(平積みされた本の最上段に本を1冊 乗せる)
pop(平積みされた本の最上段から本を1冊 取る)
平積みの本の途中から本を抜き取る,という操作は存在しません。
(例外的にその操作が存在するのなら必ず説明があるはずです)
----
No.2 で言っていることは,
次の【状態1】において
(topは「(次に)データを格納する要素位置」を指しています)
3: ←top
2: "B"
1: "A"
2: "B"
1: "A"
"C"をpushすると次の状態になり,
4: ←top
3: "C"
2: "B"
1: "A"
3: "C"
2: "B"
1: "A"
【状態1】の状態から
> 上の"C"のpushをせずに、popするのであれば、
次の状態になるということです。
2: ←top
1: "A"
1: "A"
2024.02.21 12:01
ザラメさん(No.6)
ようやく理解できました泣 わざわざ例題まで作って説明してくださって、ありがとうございました。
2024.02.21 15:38