リスト構造

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大工

リスト構造

#1

投稿記事 by 大工 » 18年前

諸事情の為、ソースは削除しました。


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

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

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

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

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

box

Re:リスト構造

#2

投稿記事 by box » 18年前

いったんリストに挿入した後で、リスト全体をソートするのは
意外とむずかしいかもしれません。

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

ゾン兵衛

Re:リスト構造

#3

投稿記事 by ゾン兵衛 » 18年前

 
 "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:リスト構造

#4

投稿記事 by 大工 » 18年前

ゾン兵衛さま, boxさま>

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

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る