大滝みや子先生のトレーニングブックより
ristaさん
(No.1)
P152についてですが、1,2の順にpushしているのに、なぜ1,2の順にpopしてy、xに代入しているのかわかりません。どなたか教えてください
2023.08.21 16:23
まーぼさん
★FE シルバーマイスター
(No.2)
本を持っていないので予測で書きます。
スタックはLIFOなので通常は1,2の順にpushしたら2,1の順にpopされます。
FIFOになっているので、キューをスタックを用いて実装するというような問題ではないでしょうか?
>1,2の順にpushしているのに、なぜ1,2の順にpopしてy、xに代入しているのかわかりません。
スタックはLIFOなので通常は1,2の順にpushしたら2,1の順にpopされます。
FIFOになっているので、キューをスタックを用いて実装するというような問題ではないでしょうか?
2023.08.21 16:54
まーぼさん
★FE シルバーマイスター
(No.3)
まーぼさん
★FE シルバーマイスター
(No.4)
なんとなく分かったので追記します。
逆ポーランド記法の文字列を入力として、その計算結果を出力するというような問題ですかね。
逆ポーランド記法の”12+”は中置記法(普段私たちが使ってる形)での”1+2”に対応します。
”12+“を入力としたとき、
文字列の1番目が数字なのでスタックにpushします。
文字列の2番目が数字なのでスタックにpushします。
このときのスタックの状態は1の上に2がある状態ですよね。
文字列の3番目が演算子なのでスタックから値を2つ取り出します。
中置記法の演算子の前の数字をfirst、後の数字をsecondとすると(first、secondはint型の変数)
最初にpopしたときに返ってくる値が2なので
second = pop();
first = pop();
とするとfirstには1がsecondには2が入りますよね。
firstとsecondを使って対応する演算子の計算をして3を返します。
もちろん演算子が”+”や”*”ならfirstに先に代入しても結果は変わりませんが、”*”や”/“なら順番も考慮する必要がありますね。
逆ポーランド記法の文字列を入力として、その計算結果を出力するというような問題ですかね。
逆ポーランド記法の”12+”は中置記法(普段私たちが使ってる形)での”1+2”に対応します。
”12+“を入力としたとき、
文字列の1番目が数字なのでスタックにpushします。
文字列の2番目が数字なのでスタックにpushします。
このときのスタックの状態は1の上に2がある状態ですよね。
文字列の3番目が演算子なのでスタックから値を2つ取り出します。
中置記法の演算子の前の数字をfirst、後の数字をsecondとすると(first、secondはint型の変数)
最初にpopしたときに返ってくる値が2なので
second = pop();
first = pop();
とするとfirstには1がsecondには2が入りますよね。
firstとsecondを使って対応する演算子の計算をして3を返します。
もちろん演算子が”+”や”*”ならfirstに先に代入しても結果は変わりませんが、”*”や”/“なら順番も考慮する必要がありますね。
2023.08.22 03:03
まーぼさん
★FE シルバーマイスター
(No.5)
>”*”や”/“なら順番も考慮する必要がありますね。
すみません、”-“,”/“ですね
2023.08.22 03:06
まきさん
(No.6)
私と同じ疑問を持つ人がいて良かったー
2023.08.22 12:11
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告