[1] 質問文 [1.1] 確保した領域にno,nameをリスト構造を使用し登録する。 領域に登録したデータは、昇順に置き換えられファイルとして出力する。 [1.2] 一通り自分なりに調べソースコードを領域確保→入力まで作成しました。 [1.4] 確保した領域にデータを入れてソートをかけようとしたが、 ソートをせず、同じ出力結果が出てしまう。 [2] 環境 [2.1] OS : WindowsXP ProfessionalSP3 [2.2] コンパイラ名 : VC++ 2008EE [3] その他 ・C言語は、初心者です。標準出力、構造体、配列系までは普通にできます。 ・#include <stdlib.h> #include <stdio.h> [4] 求める出力結果 入力内容 no = 3 name = kitarou no = 2 name = mangusu no = 1 name = ikarosu 結果(ソートの置き換え結果) no = 1 name = ikarosu no = 2 name = mangusu no = 3 name = kitarou *ソースコード #include <stdio.h> #include <stdlib.h> struct order{ int no; char name[10]; struct order *new; }; int main(){ struct order *main,*on=NULL; while(i < 3){ /* 領域確保 */ if((main = (struct order *)malloc(sizeof(struct order)) == NULL){ exit(EXIT FAILURE); } /* 入力処理 */ printf("no:"); scanf("%d",main->no); printf("name:"); scanf("%s",main->name); main->new= on; on = main; i++; } /* 昇順にソートを行う */ sample sort(on); } int sample_sort(struct order_print *on2){ struct order_print *on3; int menber_no; char menber_name[10]; /* メモリー確保 */ if((y = (struct order*)malloc(sizeof(struct order))) == NULL) { exit(EXIT_FAILURE); } on3 = on2->new; while(on2!=NULL) { /* ここからがよく分からないです ↓は自分なりに考えてみました。 */ /* no を基準にソートを行う */ if (on2->no > on3->no) { menber_no = on->no3; printf("%d\n",menber_no); on2->no = on3->no; on3->no = menber_no; } } }
自己参照型とソートについて
自己参照型とソートについて
Re:自己参照型とソートについて
ソースコード内に、多くの打ち間違いや定義のない変数等が見られます。
そちらではビルドが出来ているようなので、間違いのない正しいコードを提示してください。
そちらではビルドが出来ているようなので、間違いのない正しいコードを提示してください。

Re:自己参照型とソートについて
すみません。 以下にコンパイル済みのソースを記載いたします。 以上、宜しくお願い致します。 #include <stdio.h> #include <stdlib.h> #pragma warning(disable : 4996) int sample_sort(); struct order{ int no; char name[10]; struct order *new; }; int main(){ struct order *main,*on=NULL; int i = 0; while(i < 3){ /* 領域確保 */ if((main = (struct order*)malloc(sizeof(struct order))) == NULL){ exit(EXIT_FAILURE); } /* 入力処理 */ printf("no:"); scanf("%d",main->no); printf("name:"); scanf("%s",main->name); main->new= on; on = main; i++; } /* 昇順にソートを行う */ sample_sort(on); } int sample_sort(struct order *on2){ struct order *on3; int menber_no; char menber_name[10]; /* メモリー確保 */ if((on3 = (struct order*)malloc(sizeof(struct order))) == NULL) { exit(EXIT_FAILURE); } on3 = on2->new; while(on2!=NULL) { /* ここからがよく分からないです ↓は自分なりに考えてみました。 */ /* no を基準にソートを行う */ if (on2->no > on3->no) { menber_no = on3->no; printf("%d\n",menber_no); on2->no = on3->no; on3->no = menber_no; } } return 0; }
Re:自己参照型とソートについて
boxさんが仰るとおり、リスト構造を繋ぐときに並び替えた方が楽ですし、普通です。
でも、どうしても、後でやりたいなら不可能ではありません。
ただ、マングースさんがやろうとしている方法は理解できません。
学校の課題で、なんらかの指示があるのでしょうか?
なぜ、そう思うのかと言いますと、
sample_sortでメモリを確保してありますが、目的がわからず、
>ここからがよく分からないです
と書かれてありますので、メモリ確保部分は課題として与えられているのかと
思う次第です。
1 作成する条件が何もないなら、リスト構造を繋ぐときに並び替える
2 どうしても後で並び替えをしなければいけないのなら、いろんな方法が
あるので、並び替えの方法を指定する。
3 どんな方法でも良いのなら、その旨を記する。
でも、どうしても、後でやりたいなら不可能ではありません。
ただ、マングースさんがやろうとしている方法は理解できません。
学校の課題で、なんらかの指示があるのでしょうか?
なぜ、そう思うのかと言いますと、
sample_sortでメモリを確保してありますが、目的がわからず、
>ここからがよく分からないです
と書かれてありますので、メモリ確保部分は課題として与えられているのかと
思う次第です。
1 作成する条件が何もないなら、リスト構造を繋ぐときに並び替える
2 どうしても後で並び替えをしなければいけないのなら、いろんな方法が
あるので、並び替えの方法を指定する。
3 どんな方法でも良いのなら、その旨を記する。
Re:自己参照型とソートについて
課題内容はこのような指示を受けています。 1.order(no,name)を入力し、noで昇順にソート後、CSVファイルを作成する。 2.CSVファイルはExcelに入力して確認するものとする。 3.orderは構造体とし、領域は動的に確保/解放する 4.ソートはそれのみを行う関数を作成し、その関数をCallすることで実現する. 5.orderは最低10件は登録を行うこと 上記の指示どおりに作成するにも勉強不足なのでよく分からないです。 以上、宜しくお願いします。

Re:自己参照型とソートについて
>4.ソートはそれのみを行う関数を作成し、その関数をCallすることで実現する.
この条件からすると、後でソートしなければいけないのですね。
ソートの方法は大きく分けると2つに分類できるかな。
1 繋ぎ換えは変えずに、メンバーの値を交換する。
2 ノードの繋ぎ換えを行う。
さて、どっち?
この条件からすると、後でソートしなければいけないのですね。
ソートの方法は大きく分けると2つに分類できるかな。
1 繋ぎ換えは変えずに、メンバーの値を交換する。
2 ノードの繋ぎ換えを行う。
さて、どっち?
Re:自己参照型とソートについて
返信が送れて申し訳ないです。 >ソートの方法は大きく分けると2つに分類できるかな。 >1 繋ぎ換えは変えずに、メンバーの値を交換する。 >2 ノードの繋ぎ換えを行う。 > >さて、どっち? 「2 ノードの繋ぎ換えを行う。」で行いたいです。 上記のような事ができるのであればご教授お願いいたします。 以上、宜しくお願いします。