这个链表的排序哪里有问题? sort函数有问题
#include<stdio.h>#include<stdlib.h>
struct stu //声明学生信息结构体
{
char name[20];
int num;
float score;
struct stu *next;
};
main()
{ struct stu *sort(struct stu *p); //声明排序函数
struct stu *create(struct stu *p,int n);
struct stu *head,*p;
head=(struct stu *)malloc(sizeof(struct stu));
int n; //n是学生数目
printf("请输入学生数目");
scanf("%d",&n);
while(n>=100)
{
scanf("%d",&n);
}
head=create(head,n); //创建链表
head=sort(head); //按照什么排序
p=head->next;
while(p)
{
printf("%5s %5d %.3f",p->name,p->num,p->score);
p=p->next;
}
}
struct stu *create(struct stu *p,int n)
{ struct stu *pp,*pt;
pt=p;
int i;
for(i=0;i<n;i++)
{ pp=(struct stu *)malloc(sizeof(struct stu));
printf("请输入学生姓名:");
scanf("%s",pp->name);
printf("请输入学生学号:");
scanf("%d",&pp->num);
printf("请输入学生成绩:");
scanf("%f",&pp->score);
pt->next=pp;
pt=pp;
/* if(i==n-1)
{
p->next=NULL;
}
else
{ p=(struct stu *)malloc(sizeof(struct stu));
pt->next=p;
pt=p;
}
*/
}
pp->next=NULL;
return p;
}
struct stu *sort(struct stu *p) //排序,返回一个指针
{
struct stu *first,*cursor,*max,*prev; //prev用来跟踪max
first=p;
prev=first;
p=p->next;
while(p)
{
for(max=cursor=p;cursor;cursor=cursor->next) //找到最大的
{
if(cursor->score>max->score)
{
max=cursor;
break;
}
}
while(prev->next!=max) //找到max
{
prev=prev->next;
}
prev->next=max->next;
max->next=p->next; //把max和p连接起来
p->next=max;
p=p->next; //p向后移,减少比较范围
prev=first;
}
return first;
}