多数のデータが単方向リスト構造で格納されている。このリスト構造には、先頭ポインタとは別に、末尾のデータを指し示す末尾ポインタがある。次の操作のうち、ポインタを参照する回数が最も多いものはどれか。
ア リストの先頭にデータを挿入する。
イ リストの先頭のデータを削除する。
ウ リストの末尾にデータを挿入する。
エ リストの末尾のデータを削除する。 (平成24年度春期 問7)
各選択肢の参照ポインタ数はいくつになるのでしょうか。
解説書によって必要なポインタ参照数が異なっていて、理解できずにいます。
とある解説書では、
ア 2回のポインタの参照が必要
イ 1回のポインタの参照が必要
ウ 2回のポインタの参照が必要
と記述してあり、またある解説書では
ア 0回のポインタの参照が必要
イ 2回のポインタの参照が必要
ウ 1回のポインタの参照が必要
エ 3回のポインタの参照が必要
と記述されていました。
先頭から末尾の一つ手前のデータまで順にたどって参照する必要のあるエが一番ポインタを参照する回数が多そうだな、と想像はできるのですが、実際の参照回数までは理解の外です。。
ご教授お願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
2つの解説書とも、説明が違います。
答えがエであることはおわかりですね。
順に解説します。簡単です。
単方向リストですから、ずらりとデータが並んでいます。
アの場合は、先頭にあるポインタを2番目にして新しく確保したポインタを先頭にするだけですから2回です。
イは、先頭のポインタの参照を殺して2番目のポインタにすればいいので、1回です。先頭を見る必要はありません。
ウは、最後のポインタを更新することになりますから、1回です。
エは、最後のポインタを最後から2番目のポインタにしなければいけません。
イの場合は最初+1が2番目のポインタになりますけど、エは最後ー1のポインタを確保しなければならないのです。
だったら、エ、は最初からずっと最後になるまで全部を調べてはじめて、最後ー1がわかります。
仮にリストが2個しかなくても2回は必要です。n個あったらn回参照です。
No.3
- 回答日時:
ア)を実現するためには次の2つの処理を実行すればよい。
・挿入要素の次ポインタ部←先頭ポインタの中身
・先頭ポインタの中身←挿入要素のアドレス
--------
イ)を実現するためには次の処理を実行すればよい。
・先頭ポインタの中身←先頭ポインタが指す要素の次ポインタ部の中身
【補足】
回答No.2では次のように解説されていますけれど,
> イは、先頭のポインタの参照を殺して2番目のポインタに
> すればいいので、1回です。先頭を見る必要はありません。
先頭ポインタを起点にリストを一歩進まないと2番目の要素のアドレスは得られません。
私なら,上記の イ)の処理は,実質的に次の2つの処理だと見なします。
・変数X←先頭ポインタの中身
・先頭ポインタの中身←変数Xが指す要素の次ポインタ部の中身
--------
ウ)を実現するためには次の処理を実行すればよい。
・末尾ポインタが指す要素の次ポインタ部の中身←挿入要素のアドレス
・末尾ポインタの中身←挿入要素のアドレス
前述と同様,私はこれを実質的に次の3つの処理だと見なします。
・変数X←先頭ポインタの中身
・変数Xが指す要素の次ポインタ部の中身←挿入要素のアドレス
・末尾ポインタの中身←挿入要素のアドレス
--------
そして最後の エ)ですが。
単方向リストにおける要素の削除とは,
削除対象要素を書き換えることではなく,
「削除対象要素の1つ前の要素の次ポインタ部」を書き換えることです。
末尾要素に達するだけなら,末尾ポインタから一発で到着することができますが,
そこから「末尾要素の1つ前の要素」に移動しようとしても,単方向リストなので末尾要素から1つ前に遡ることは不可能です。
したがって,回答No.2で解説されているとおり,
先頭ポインタから単方向リストを一歩一歩 順にたどることによってでしか「末尾要素の1つ前の要素」に達することはできません。
そこに達した後は次の処理を実行します。
・末尾要素の1つ前の要素の次ポインタ部の中身←リスト終端を表す特別な値
・末尾ポインタの中身←末尾要素の1つ前の要素のアドレス
No.4
- 回答日時:
「ポインタの参照」をどう捉えるかで、数が変わってきますね。
例えば、新規の要素を確保してそのポインタをどこかに設定する場合、既存のポインタは見ていないので参照回数に加えないのか、新規確保したポインタも数に入れて+1とするかは解釈が分かれるかと。
まあ、答えがエで有ることは変わらないですが。(要素が多数で、末尾の要素を指しているもの以外の全てのポインタを参照する必要が有る為)
個人的には「ポインタの参照」を「既存のポインタの値を取得すること」と捉えるのが妥当だと思いますので、下記のページの解説が分かりやすくて良いと思います。
http://itpro.nikkeibp.co.jp/article/COLUMN/20120 …
だたし、このページも間違っている箇所は有ります。
エの場合、末尾のデータを指しているポインタは(書き換える必要は有っても)参照する必要は無いので図の最後の青矢印は不要です。(解説の文章の方は間違っていませんが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 双方向リスト 1 2023/06/28 04:16
- Visual Basic(VBA) 指定文字を太字にするVBAを別シートのセルを指定する構文(改良について) 6 2022/08/27 22:11
- その他(プログラミング・Web制作) python コードについて(初学者です) 3 2023/07/20 14:44
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- C言語・C++・C# C言語で構造体の参照渡しができません 2 2022/12/18 21:22
- Excel(エクセル) エクセルVLOOK関数について 3 2022/07/05 08:45
- Excel(エクセル) エクセルで対象日に該当するデータがある場合に別表へ全対象者を表示させたい。 3 2023/07/12 09:48
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
関連するカテゴリからQ&Aを探す
医師・看護師・助産師
薬剤師・登録販売者・MR
医療事務・調剤薬局事務
歯科衛生士・歯科助手
臨床検査技師・臨床工学技士
理学療法士・作業療法士・言語聴覚士
臨床心理士・心理カウンセラー・ソーシャルワーカー
介護福祉士・ケアマネージャー・社会福祉士
弁護士・行政書士・司法書士・社会保険労務士
フィナンシャルプランナー(FP)
中小企業診断士
公認会計士・税理士
簿記検定・漢字検定・秘書検定
情報処理技術者・Microsoft認定資格
TOEFL・TOEIC・英語検定
建築士
インテリアコーディネーター
宅地建物取引主任者(宅建)
不動産鑑定士・土地家屋調査士
マンション管理士
電気工事士
美容師・理容師
調理師・管理栄養士・パティシエ
シェフ
保育士・幼稚園教諭
教師・教員
国家公務員・地方公務員
警察官・消防士
その他(職業・資格)
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
【C言語】戻り値が構造体の関数
-
構造体とfscanf
-
C言語の関数と配列に関する質問
-
関数ポインタの利点
-
C言語 ポインタ
-
main(int argc,char **argv[])...
-
CObArrayとCPtrArrayの違い
-
戻り値で構造体を返すことは可...
-
TCHAR文字列内の検索について
-
CImage GetBitsメソッドについて
-
参照型で受け取った引数をポイ...
-
C言語のポインタに直接アドレス...
-
VB6でのgethostbyaddrの使用方...
-
配列3個へのポインタを返す関数
-
printfとscanfの違いって・・・
-
DLL<->VB間での受け渡し(文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
C言語の関数と配列に関する質問
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
main(int argc,char **argv[])...
-
アプリを32bitから64bit移行
-
ハンドルはポインタか
-
連結リスト 要素の入れ替え
-
C言語でのconstを返す関数
-
Cで作成したDLL関数をVBから呼...
-
NULLとブランクの違い
-
エラーの意味
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
-
【C言語】戻り値が構造体の関数
おすすめ情報