pMove=head;
while(pMove!=NULL)
{
strcpy(i,pMove->clas);
strcpy(j,pMove->next->clas);
if(strcmp(i,j)>0)
{
strcpy(na,i);
strcpy(i,j);
strcpy(j,na);
}
pMove=pMove->next;
}
pMove=head;
while (pMove != NULL)
{
printf("%5s%5s%20s%5s%20s%20s%20s%10s\n", pMove->name, pMove->sex, pMove->major,
pMove->clas, pMove->birthday, pMove->stu_code, pMove->id_code, pMove->enyear);
pMove = pMove->next;
}
修改调试通过,带头结点链表,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct dat {
char name[5];
char sex[5];
char majo[20];
char clas[5];
char birthday[20];
char stu_code[20];
char id_code[20];
char enyear[10];
}Data;
typedef struct lnode {
Data data;
struct lnode* next;
}LNode;
void sort(LNode *head)
{
LNode* pMove = head->next, * pNext = NULL;
Data na;
while(pMove)
{
pNext = pMove->next;
while (pNext != NULL)
{
if (strcmp(pMove->data.clas, pNext->data.clas) > 0)
{
na = pMove->data;
pMove->data = pNext->data;
pNext->data = na;
}
pNext = pNext->next;
}
pMove = pMove->next;
}
pMove = head->next;
while (pMove != NULL)
{
printf("%5s%5s%20s%5s%20s%20s%20s%10s\n", pMove->data.name,
pMove->data.sex, pMove->data.majo,pMove->data.clas,
pMove->data.birthday, pMove->data.stu_code,
pMove->data.id_code, pMove->data.enyear);
pMove = pMove->next;
}
}
这里交换的是 i j 的值strcpy(na,i); strcpy(i,j); strcpy(j,na);,并没有交换链表的结点值。
修改为:
strcpy(na, pMove->data);//交换的是结点的数据域内容
strcpy(pMove->data, pMove->next->data);
strcpy(pMove->next->data, na);