平成26年秋午後問3アルゴリズムのポインタについて

room710さん  
(No.1)
https://www.ap-siken.com/kakomon/26_aki/pm03.html

こちらの問題における「リストのポインタ操作」というものが、
解説を読み考えてみてもなかなか理解することができないのですが、
どなたかご解説頂けませんでしょうか。

例えば、
図6の①から②へと移る過程において起こっている変化は、
・ダミーのセルをもう一つ繋げる
・そのセルに8が格納される
・それをポインタpが↑を指す
…といったような理解で合っているのでしょうか?

またその実行文にあたる図7(関数merge)の
p->next ←b
p ←b
b ←b->next
の各行は、それぞれどの動きに対応しているのでしょうか?

そもそも根本的に「ポインタ」というものが理解できていないことは重々承知でして、
自分なりに各種参考書などを読んで考えてはみているものの、
「何が分からないのか分からない」状態から脱することができず困っております。
「まずは〇〇を理解すべき」や「いったん〇〇を参考にすべき」等のようなヒントでも結構ですので
ご教示いただけると幸甚です。

宜しくお願い致します。

2022.03.14 23:17
nsさん 
AP ブロンズマイスター
(No.2)
少し違います。
①のダミーセル右側の空白の□から、bが指している「8」の部分へ→を伸ばすイメージです。これがプログラム中の『p->next <- b』にあたります。
pがheadと同じセル(ダミー)を指しているので、今つなげた「8」を指すようにします。これが『p <- b』にあたります。
bとpが同じ「8」のセルを指している状態なので、ポインタbが「8」の次の要素を直接指すようにします。これが『b <- b->next』にあたります。

(ここからは少し混乱を招くかもしれないので、分からなければ無視していただいてもOKです)
図示されていませんが、この3行の処理を行った後、「8」->「23」のポインタはつながったままになります。このポインタはループ2周目の『p->next <- a』で書き換えられて、「8」->「10」となります。もちろんこの時、「10」->「16」がつながったままになります。

ポインタを使用する言語(C言語など)を実際に使ってみることをお勧めしたいですが・・・
環境構築などしなければならないので、正直ハードルが高いです。
paizaのようなオンラインでプログラミングできる環境も存在するので、そういうところで試してみるのもアリかもしれません。
2022.03.15 09:06
GinSanaさん 
AP プラチナマイスター
(No.3)
まあ、環境構築っていっても、WSLのUnuntuを立ててそのままC99コンパイラ使うか、gccコンパイラ(とgdb)を入れればCの環境自体はできますよね。
AndroidのTermuxでもClangコンパイラがデフォルトであるから、そんなにハードルが高いのか?とは今では思うような。確かにWindowsそのままだと、MinGWとかを研修で使うときに色々うんざりしますが。
2022.03.15 09:48
r0om710さん 
(No.4)
nsさん

たいへん分かりやすいご解説を有難うございます。
恥ずかしながらC言語などの知識はございませんでしたので、
図6をエクセルの図形と矢印で作り、ご解説頂いた通りに実行文をなぞりながら動かしてみたところ
イメージを掴むことができました。

その際、各種実行文については↓のように解釈しました。
================================================
ポインタx ← ポインタy
…ポインタxが指し示すセルを、ポインタyが指し示すセルに変更する

ポインタx ← ポインタy->next
…ポインタxが指し示すセルを、ポインタyが指し示すセルの次のセルに変更する

ポインタx->next ← ポインタy
…ポインタxが指し示すセルの次のセルを、ポインタyが指し示すセルに変更する
================================================

また補足部分についても、
3行目の処理終了時にはポイントが繋がったままであることを確認いたしました。
こちらもご解説有難うございました。
2022.03.16 02:27
r0om710さん 
(No.5)
GinSanaさん

C言語の開発環境についてご解説有難うございました。
当方お恥ずかしながら仕事をする傍ら座学で勉強しているだけの
プログラミング未経験者でして(FEはアセンブラで受かりました)、
ご解説内容だけでも十分難しそうに見えておりますが、
AP合格後に機会があればトライしてみたいと思います。
2022.03.16 02:32
GinSanaさん 
AP プラチナマイスター
(No.6)
r0om710さん
それだと厳しいかもしれませんね。もしやる機会があったら、インターネットの構築サイトを見て頑張ってください。いまはqiitaとかあってそこそこ便利です。慣れていないと環境作るのもなかなか大変ですが・・・。
2022.03.16 09:30
r0om710さん 
(No.7)
GinSanaさん

コメント有難うございます。
qiitaというのも初めて知りました。
はい、引き続き精進しますので今後ともご教示いただければ嬉しいです。
有難うございました。

2022.03.17 15:33

返信投稿用フォーム

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

その他のスレッド


Pagetop