[812] (ぱ)さんに甘えさして頂きます
投稿者:負け組一号
2007/02/20 02:13:25
レス頂き、ありがとうございました。
そんで、(ぱ)さんに、甘えた質問さしていただきます。
ソースなんで長いですが自分でリストを理解しようと改造した線形リストです。
typedef struct list {
int num;
struct list *next;
}list;
int main() {
list sta ={0,NULL};
list *start = &sta; /*先頭*/
list *sagyou; /*作業領域*/
list *fo; /*for用*/
char str[16]; /*入力用*/
while(1) {
printf("整数を入力(Eで終了)-->");
gets(str);
if(strcmp(str,"E") != 0){//strcmpは文字列の比較
sagyou = (list *)malloc(sizeof(list));
if(sagyou == NULL ){
printf("メモリ確保できず\n");
exit(1);
}
}
else break;
sagyou->num = atoi(str);//atoiは文字列をint型に変換する
for(fo = start; fo->next != NULL; fo = fo->next){
if(sagyou->num < fo->next->num ){
sagyou->next = fo->next;
fo->next = sagyou;
break;
}
}
if(fo->next == NULL){
fo->next = sagyou;
sagyou->next = NULL;
}
}
で、上のリストで、数字を大きい順にしようとするとき
for(fo = start; fo->next != NULL; fo = fo->next){
if(sagyou->num < fo->next->num )
の、fo->next->numは、その時点でのfoのnext側のnumを見てる
と捉えて良いのでしょうか。ついで、malloc()で得たメモリは
どこでfree()というやつで解放してやれば良いのでしょうか。
線形リスト、双方向リスト等、及び二分木探索などの例ばかりが
載ってる書籍を探しても、あるのは入門書ばかりで、初心者
から脱皮できない自分に負い目を感じる今日このごろです。