关于C语言中链表排序
#include<stdio.h>#include<string.h>
#include<stdlib.h>
struct STUDENT{
char name[20];
char sex;
float chinese,math;
float sum;
struct STUDENT *next;
};
typedef struct STUDENT ST;
ST *m();
void print(ST *head);
ST *n(ST *m);
void main()
{
ST *head,*k;
head=m();
print(head);
k=n(head);
print(k);
}
ST *m()
{
ST *head,*p,*q;
char an[20];
head=(ST *)malloc(sizeof(ST));
if(head==NULL)
{
puts("申请内存失败");
exit(0);
}
q=head;
puts("姓名");
gets(an);
while(strlen(an))
{
p=(ST *)malloc(sizeof(ST));
if(p==NULL)
{
puts("申请内存失败");
exit(0);
}
strcpy(p->name,an);
puts("性别");
p->sex=getchar();
puts("请输入数学和语文成绩");
scanf("%f%f",&p->chinese,&p->math);
getchar();
p->sum=p->chinese+p->math;
q->next=p;
q=p;
puts("姓名");
gets(an);
}
q->next=NULL;
return head;
}
void print(ST *head)
{
ST *p;
p=head->next;
if(p==NULL)
printf("链表不存在\n");
else
{
printf("名字\t\t性别\t\t语文\t\t数学\t\t总分\n");//控制输出的格式
while(p!=NULL)
{
printf("%s\t\t%c\t\t%2.1f\t\t%2.1f\t\t%2.1f\n",p->name,p->sex,p->chinese,p->math,p->sum);
p=p->next;
}
}
}
ST *n(ST *m)
{
ST *a;
ST *max;
ST *p,*q;
p=m->next;
if(p==NULL)
puts("此链表空的");
else
if(p->next==NULL)
{
printf("此链表为单链表");
printf("名字\t\t性别\t\t语文\t\t数学\t\t总分\n");//控制输出的格式
printf("%s\t\t%c\t\t%2.1f\t\t%2.1f\t\t%2.1f\n",p->name,p->sex,p->chinese,p->math,p->sum);
}
else{
q=p->next;
while(p->next!=NULL)
{
max=p;
while(q!=NULL)
{
if((max->sum)<(q->sum))
{
max=q;
}
q=q->next;
}
a=max;
max=p;
p=a;
p=p->next;
}
}
return m;
}
//这个程序那里有问题