对连表从小到大排序的函数,总算弄出来了,但感觉麻烦,希望各位能提供一种更好的方法
struct student{
char num[5];
char name[20];
float score;
struct student*next;
};
struct student* paixu(struct student*p,int n)//n为接点数
{
struct student *p1,*p2,*temp,*head;
int i;
head=p;
p1=p;
p2=p1->next;
if(n>1)
for(i=0;i<n-1;i++)
{do
{if(strcmp(p1->num,p2->num)>0)
{p1->next=p2->next;
p2->next=p1;
if(p1!=p)
p->next=p2;
if(p1==p) //判断被换的接点是不是头接点//
head=p2;
temp=p1;
p1=p2;
p2=temp; //p1和p2 的换值是为了让p1始终在p2 前面//
}
if(p!=p1&&p!=p2)
p=p->next;
else
p=head;
p1=p1->next;
p2=p2->next;
}while(p1->next!=NUL);
p=head;
p1=head;
p2=p1->next;}//比完一论后在回归头一个接点//
return(head);
}