ページ 11

双方向リストのソート関数を作ろうと思ってるのですが,

Posted: 2010年6月10日(木) 14:27
by 夏ミカン
typedef struct _list{
struct _list *next;
struct _list *prev;
char Student_Number[50];
char Family_Name[50];
char First_Name[50];
char Tel_Number[50];
char Post_Number[50];
}List;


List *header_Copy;


void Sort(List *p){ //pはheader_Copyを引数としています
List *q;
q=(List*)malloc(sizeof(List));
if(q==NULL) exit(1);

while(p->next!=header_Copy){
p=p->next;
q=p->next;
while(q->next!=header_Copy){
if(strcmp(p->Student_Number,q->Student_Number)>0){
p->prev->next=q;
q->prev=p->prev;
q->next->prev=p;
p->next=q->next;
q->next=p;
p->prev=q;
}
q=q->next;
}

}
}


このような感じにしたのですが、うまくいきません

よければ、教えてください

実行結果はheader_Copyの要素が下の時、ループからぬけないです

学籍番号 e
氏 e
名 e
電話番号 e
郵便番号 e

学籍番号 t
氏 e
名 e
電話番号 e
郵便番号 e

header_Copyが下の時

学籍番号 t
氏 e
名 e
電話番号 e
郵便番号 e

学籍番号 e
氏 e
名 e
電話番号 e
郵便番号 e

ソート結果は

学籍番号 t
氏 e
名 e
電話番号 e
郵便番号 e

学籍番号 e
氏 e
名 e
電話番号 e
郵便番号 e

となります、すみません、よろしくお願いします
画像

Re:双方向リストのソート関数を作ろうと思ってるのですが,

Posted: 2010年6月10日(木) 14:31
by たかぎ
質問は何でしょうか?
それとも雑談?

Re:双方向リストのソート関数を作ろうと思ってるのですが,

Posted: 2010年6月10日(木) 14:34
by 夏ミカン
すみません、間違えてえんたーをおして不完全なまま投票されました^^;

Re:双方向リストのソート関数を作ろうと思ってるのですが,

Posted: 2010年6月10日(木) 15:24
by たいちう
デバッグしてみようと思ったけど、header_Copyをどのように使うつもりなのかが判らない。
ループから抜けない、という状況を再現できる完全なソースコードを添付してください。