人に聞けない痔の悩み、これでスッキリ >>

領域を確保した後、アドレスを書き変える勉強をしています。入力した文字を逆から表示していくことに成功したので今度はソートで小さい順に並び替えをさせようとしまして、色々試したのですが何度やっても上手くいきません。

どのように組めばいいか教えてください。よろしくお願いします。

#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;
}

このQ&Aに関連する最新のQ&A

A 回答 (3件)

<補足要求>


プログラムだけポンと出してわかりません、
よろしくってのは課題の丸投げですよね。

少なくとも、
・変数の意味
・関数の仕様
 -関数内部で何をしようとしているのか。
・main関数で何をしようとしているのか。
ぐらいは必要です。

ちなみにざっと見たのですが、
このプログラムにソートのロジック、
入ってますか?
    • good
    • 0

一方向リンクリストだと、使えるソートアルゴリズムは限られます。

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

ヒントはこれくらいにしておきます。
    • good
    • 0

ソートをしているようなソースコードが一切見当たりませんが?


>色々試したのですが何度やっても上手くいきません。
うまくいかなかったソースコードを提示してください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング