• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ポインターの繋ぎ換え)

ポインターの繋ぎ換え

このQ&Aのポイント
  • 動的に確保した領域にデータを入れ、入れたデータをソートするプログラムを作成しています。
  • ソートする際に最後まで見た場合に再度先頭に戻る方法が分からないので、ご教授をお願いします。
  • 現在の状況として、入力したデータを降順にソートすることができています。

質問者が選んだベストアンサー

  • ベストアンサー
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

えーっと、詳細に書かれていて分かりやすいようで…分かりにくい。 単方向のリンクリストですよね。 struct sample {   int no;   char[MAX_SIZE] Name;   struct sample* next; } 的な感じになっているんでしょうか? >ソートする際に(入力3データ)→[head=p->next]→(入力2データ)→[head=p->next]→(入力1データ)→[head=p->next]と最後まで見た場合に再度先頭に戻る方法が分からないのでご教授お願いします。 headをいじるのはアウトです。 struct sample* p = head; for (; p != NULL; ++p) ... といった感じにしないと最初の位置がわからなくなりますし、メモリの開放もできなくなります。 交換方法は("s数値"はstruct sample* 型です) ... -> s1 -> s2 -> s3 -> s4 -> ... とつながっていたとして、s2, s3を入れ替えたいとしたら struct sample p = s3->next; s1->next = s3 s3->next = s2 s2->next = p; //= s4 という感じでできます、多分(今考えてやってるので間違ったら御免)。 入れ替え走査さえできればソートはできるはずです。

wing3675
質問者

お礼

何とか解決いたしました。 ありがとうございます。

wing3675
質問者

補足

回答ありがとうございます。 >単方向のリンクリストですよね。 はい。 >struct sample { >  int no; >  char[MAX_SIZE] Name; >  struct sample* next; >} >的な感じになっているんでしょうか? 構造体の定義は、上記の記述の通りです。 >headをいじるのはアウトです。 記述ミスですみません。headは、struct sample *head=NULL です。 >struct sample p = s3->next; >s1->next = s3 >s3->next = s2 >s2->next = p; //= s4 >という感じでできます、多分(今考えてやってるので間違ったら御免)。 考え方は,それでいいのですが プログラム的に考えると、数値の判断をどうすればいいのかがちょっと分からないところです。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

>動的に確保した領域にデータを入れ、 >入れたデータをソートするプログラム 構造体の定義 何をキーにしてソートするか ソート順は昇順か降順か まずはこの3点を示してください。

wing3675
質問者

補足

回答ありがとうございます。 詳細が書かれていなくてすみません。 >構造体の定義 LOHAさんと同じ定義です。 struct sample {   int no;   char[MAX_SIZE] Name;   struct sample* next; } >何をキーにしてソートするか int no をキーにしてソートします。 >ソート順は昇順か降順か 降順でソートします。 *詳細 struct sample *p,*head=NULL; pに対して動的な領域の確保してあります。 以上、お願いします。

すると、全ての回答が全文表示されます。

関連するQ&A