ページ 11

リスト構造

Posted: 2007年10月27日(土) 23:56
by 大工
諸事情の為、ソースは削除しました。


上記のプログラムでちょっとした不具合が出てしまったので質問させてください。

入力された数値をソートされた順に表示するプログラムで

input = 1
[ 1 ]
input = 2
[ 1 2 ]
input = 3
[ 1 3 2 ]

と入力すると"1", "2"までは小さい順から表示(リスト要素の入れ替ええ)されますが"3"からきちんとした表示がでません。
"3"は最初、リストの先頭にありますがソートが"1"と交換した次でfor文を抜けてしまいます。

原因がぜんぜんわかりません・・・・・・・

Re:リスト構造

Posted: 2007年10月28日(日) 00:44
by box
いったんリストに挿入した後で、リスト全体をソートするのは
意外とむずかしいかもしれません。

sort_node()を思い切って廃棄し、
insert_node()で「リストのどこに挿入すべきかを
見つけてから挿入する」ようにすれば、
挿入した時点でソート済みになります。

Re:リスト構造

Posted: 2007年10月28日(日) 04:45
by ゾン兵衛
 
 "sort"関数も考えてみました。
これでうまくいく・・・はず。
void sort(node_t **n)
{
	node_t *p , *q;
	
	p = q = *n;
	while(p->next != NULL && q->value > p->next->value) p = p->next;
	if(p == q) return;
	(*n) = (*n)->next;
	q->next = p->next;
	p->next = q;
}

Re:リスト構造

Posted: 2007年10月28日(日) 23:58
by 大工
ゾン兵衛さま, boxさま>

返信ありがとうございます。

もういちど再設計してみたらゾン兵衛さんと同じアルゴリズムになりました。

ソースのUpありがとうございます。