- ベストアンサー
ファイルリストをASCIIコード順にソートするプログラム
- ASCIIコード順になるようにファイルリストをソートするプログラムを作成しています。
- ファイルリストに含まれるパスを基準にソートし、ASCIIコード順に表示します。
- 現在のプログラムでは、リストの仕組みが理解できず、ソートがうまくいっていません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> cell->next = ins_buf->next; > ins_buf->next->next = cell->next->next; チェインの貼り替えが混乱してます。 cell を挿入するときは、ins_buf の次 (ins_buf->next) を cell->next に設定し、ins_buf->next に cell を設定します。 > { > head = cell; > return cell; > } それと、head の書き換えはこの関数内ローカルなのをお忘れなく。 struct dirent_cell * insert_dirent_cell(struct dirent_cell *head, struct dirent_cell *cell) { struct dirent_cell *ins_buf; cell->next = NULL; //最初に挿入 if (head == NULL) return cell; //先頭に挿入 if (strcmp(head->name, cell->name) > 0) { cell->next = head; return cell; } //途中に挿入 for (ins_buf = head; ins_buf->next; ins_buf = ins_buf->next) if (strcmp(ins_buf->next->name, cell->name) > 0) { cell->next = ins_buf->next; ins_buf->next = cell; return head; } //最後に挿入 ins_buf->next = cell; return head; }
その他の回答 (2)
- falcon9311
- ベストアンサー率40% (8/20)
//最初に挿入 head->next = NULL; が必要なのでは? //先頭に挿入 head->next = cell->next->next; ↑ これはどんな意図で?
- t_nojiri
- ベストアンサー率28% (595/2071)
ちょっと見たところ、リスト構造がちゃんと固まってないんじゃないかという気がします。 普通、リスト構造って実体へのポインタと、nextポインタ(次のリストのポインタ)、(prevポインタ(前のリストのポインタ))みたいな形になるのかと思いますけどそういう意味じゃそのパスを含む実体へのポインタがどれなのか?次のリストへのポインタがどれなのかさっぱり分かりません。 そこさえ整理出来れば、リスト構造の扱い方は沢山紹介ページとか有るし、途中に挿入したらリストのポインタ付け替え方とかも紹介されてるでしょうけど。 http://www005.upp.so-net.ne.jp/h-masuda/cl/CAlgo/list02.html