C言語なら俺に聞け! Part 123
■ このスレッドは過去ログ倉庫に格納されています
0656・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 13:43:19クィックソートあたりの実装を参考にするといいお。
こっちが再帰コール版
http://www.comp.dit.ie/rlawlor/Alg_DS/sorting/quickSort.c
再帰コールせず自前スタック管理とループで実現
http://www.d.umn.edu/~gshute/C/examples/quicksort.C.html
まぁ俺ならこんなコードにするかな。細かい部分は端折るが。
int depth = 0; //現在の階層; 0がトップ
LPNODE p = tree->head;
LPNODE *stack = (LPNODE*) malloc( sizeof (LPNODE) * 100 ) ;
for ( ;; ) {
if ( p->child ) { //ネストあり
開始タグ出力
stack[depth++] = p; //push, 下の階層に逝く
p = p->child;
}
出力とか
if ( !p->next ) { //同階層の終端に達した
p = stack[depth--]; //pop , 上の階層に戻る
終了タグ出力
if (depth == -1) break;
}
p = p->next; //同階層の次の要素を参照
}
free(stack);
■ このスレッドは過去ログ倉庫に格納されています