• 締切済み

領域を確保した後の文字の並び替え

領域を確保した後、アドレスを書き変える勉強をしています。入力した文字を逆から表示していくことに成功したので今度はソートで小さい順に並び替えをさせようとしまして、色々試したのですが何度やっても上手くいきません。 どのように組めばいいか教えてください。よろしくお願いします。 #include<stdio.h> #define MAX 40 struct parts * ListChar(char moji[]); typedef struct parts{ struct parts *next; char moji; }PARTS; main(void){ char moji[MAX]; PARTS *list; PARTS *head; scanf("%s",moji); head = ListChar(moji); for(list=head ; list!=NULL ; list=list->next){ printf("%c",list->moji); } printf("\n"); for(list=head ; head!=NULL ; list=head){ head = list->next; free(list); } } struct parts * ListChar(char moji[]){ int i,j,len1; char dam; PARTS *head; PARTS *list; PARTS *back; PARTS *start; PARTS *list2; len1 = strlen(moji); for(i=0 ; i<len1 ; i++){ list = (struct parts *)malloc(sizeof(struct parts)); /*領域の確保*/ list->next = NULL; if(i == 0){ head =list; }else{ back->next =list; } back = list; list->moji = moji[i]; } head = back; return head; }

みんなの回答

  • linus1974
  • ベストアンサー率19% (71/370)
回答No.3

<補足要求> プログラムだけポンと出してわかりません、 よろしくってのは課題の丸投げですよね。 少なくとも、 ・変数の意味 ・関数の仕様  -関数内部で何をしようとしているのか。 ・main関数で何をしようとしているのか。 ぐらいは必要です。 ちなみにざっと見たのですが、 このプログラムにソートのロジック、 入ってますか?

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

一方向リンクリストだと、使えるソートアルゴリズムは限られます。直接挿入法でやるしかないでしょう。 ・既存の昇順リストに1要素を、データが昇順であるという性質を満たしたまま挿入する関数 insert( ????? , struct parts * )を作る。 ・データを1つづつinsertに渡す。 という手順です。 特に注意すべきなのは、次のような状況です。 ・「データが0個入ったリスト」と1要素を引数として受け取って挿入する処理 ・「データが何個か入ったリスト」に1つの要素を入れようとしたら、入れるべき場所が先頭だった。 ヒントはこれくらいにしておきます。

  • keibou21
  • ベストアンサー率31% (18/58)
回答No.1

ソートをしているようなソースコードが一切見当たりませんが? >色々試したのですが何度やっても上手くいきません。 うまくいかなかったソースコードを提示してください。