C/C++の宿題片付けます 128代目at TECH
C/C++の宿題片付けます 128代目 - 暇つぶし2ch717:デフォルトの名無しさん
09/07/07 01:35:43
>>695
いろいろ間違ってる。
nextを使うべきでないところで使っている(このためstr->next・str2->nextでstrやstr2がNULLになることがある)。
最小値がstr1でない場合に、次のループではstr1を跳ばしている(このためstr1がNULLになることがある)。
どうしてもtop入れ換えでやりたいなら、図でも書いて落ち着いて考えること。

top入れ換えではなく、最小値を1個ずつ抜いて別のツリーをつくる方がややこしくなくてお勧め。

struct data *sort(struct data *top){
  struct data work, *d, *target = top, *current = &work;
  for(target = top; target != NULL; target = top){ //元のツリーがなくなるまで
    for(d = target->next; d != NULL; d = d->next){ //最小値探索
      if(strcmp(target->name, d->name) > 0) target = d;
    }
    if(top == target){
      top = target->next; //最小値がtopならtopにnextを保持
    }else{
      for(d = top; d->next != target; d = d->next) ; // 最小値がtop以外なら最小値の親と最小値の子をつなげる
      d->next = target->next;
    }
    current->next = target; // 新しいツリーの末尾に最小値を追加
    current = target;
    current->next = NULL;
  }
  return work.next;
}


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch