双方向リストのソート関数を作ろうと思ってるのですが,
Posted: 2010年6月10日(木) 14:27
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
となります、すみません、よろしくお願いします

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
となります、すみません、よろしくお願いします
