応用情報技術者過去問題 平成21年春期 午後問2

質問さんさん  
(No.1)
本文より
構造体を参照する変数からその構造体の構成要素へのアクセスには"."を用いる。例えば,図1のキー値 25 のデータは table[4].data でアクセスできる。また,構造体の実体を生成するには,次のように書き,生成された構造体への参照が値になる。
  new Node(key,data,nextNode)

図1の table[4].data の中身の黒丸●から下に↓が伸びてnodeのkey値25を
指しているわけで、これを参照するというのだと思いますが
●には25が入っているという解釈でよろしいのでしょうか?
参照というのはもっと抽象的なことですか?ポインタという概念と
関係がありそうですが、それがどーいうものなのか分かりません。

new Node(key,data,nextNode)これも構造体の実体の式を作り上げる
命令だと思うんですが、「生成された構造体への参照が値になる。」
これの意味がいまいち分かりません。構造体を作る一方で
●の数値も作るってことなんでしょうか?
最初の質問と被りますが、key値25のノードを作る場合、●の数値が25になるのでしょうか?
2017.09.06 10:43
通りすがりの者さん 
(No.2)
「参照」は「ポインタ」で置き換えていいでしょう。図1の table[4].data の中身の黒丸●には、キー値25のノードへのポインタ(キー値25のノードの先頭アドレス)が入っています。

構造体の実体を生成するには,次のように書き,生成された構造体への参照が値になる。
  new Node(key,data,nextNode)
というのは、
new Node(key,data,nextNode)
と書くことによってノードが生成されるとともに、
new Node(key,data,nextNode)
の値がこのノードへのポインタということです。
したがって、図3の空欄エがある行は、このノードを生成し、このノードへのポインタをtempNodeへ設定するということです。
2017.09.06 18:53
質問さんさん  
(No.3)
>キー値25のノードへのポインタ(キー値25のノードの先頭アドレス)が入っています。
キー値25のノードの先頭アドレス アドレスという説明、これでよく分かりました。

ノードには個々に番号があってそれを参照しているのかとか色々考えてしまいました。

問題文の図1を参考にして以下の例で考えてゆきたいと思います
hash値を2としてキー値16のノードを作成する。(新ノード作成前、
キー値37と23のノードが順番に存在するとする、便宜上、キー値37の
ノードの先頭アドレスは1とする、キー値23のノードの先頭アドレスは
4とする)新ノードのdataは適当にitoとする
 new Node(key=16,data=ito,nextNode=table[hash]=table[2]=1)
キー値37のノードの先頭アドレス1がtable[2]の●に設定されている

(key=16,data=ito,table[2]=1)のノードのアドレスを7とすると
同時にこの7がtable[2]の●に設定される
これでキー値16のノード→キー値37のノード→キー値23のノードが
完成する

こんな解釈でよろしいですか?
2017.09.07 07:38
通りすがりの者さん 
(No.4)
おそらくわかっていらっしゃることと思いますが、念のためです。

new Node(key=16,data=ito,nextNode=table[hash]=table[2]=1)
と書くことによって、キー値16のノードが生成されるとともに、
new Node(key=16,data=ito,nextNode=table[hash]=table[2]=1)の値が7になります。このノードを配列につなぐために、7をtempNodeへ設定し、tempNodeをtable[hash]に設定します。

私がおや?と思ったのは、空欄エとオの行を
table[hash] ← new Node(key,data,table[hash])
のように1行でなぜ書けないのかという点です。もしかして、左辺と右辺の両方にtable[hash]があるとマズイので、いったんtempNodeを経由するのかもしれません。ここは自信がないです。
2017.09.07 16:11
質問さんさん  
(No.5)
>new Node(key=16,data=ito,nextNode=table[hash]=table[2]=1)
と書くことによって、キー値16のノードが生成されるとともに、
new Node(key=16,data=ito,nextNode=table[hash]=table[2]=1)の値が7になります。このノードを配列につなぐために、7をtempNodeへ設定し、tempNodeをtable[hash]に設定します。

レス遅れすいません。丁寧に導いてくださってありがとうございます。
まとめますと、
new Node(key=16,data=ito,nextNode=table[hash]=table[2]=1)
で、キー値16のノードが生成され、キー値16とキー値37のノードが繋がる。
キー値37のノードは既にキー値23のノードと繋がっている。
3つのノードが繋がった形になる
ただし、キー値16のノードは配列と繋がっていないので、
このままでは配列としてはキー値37のノードとキー値23のノード
の繋がりのまま。
なので、table[2]の●にキー値16のアドレスを入れる。
このような感じですかね。


2017.09.14 10:01

返信投稿用フォーム

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

その他のスレッド


Pagetop