C语言链表排序范例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#define SS struct student
int n;
SS{
int num;
float grade;
SS*next;
};
SS*creat()
{SS*head,*p,*q;
int i;
p=q=(SS*)malloc(sizeof(SS));
printf("请输入第1个学生的学号和成绩:");
scanf("%d,%f",&p->num,&p->grade);
head=q;
for(i=2;i<=n;i++)
{p=(SS*)malloc(sizeof(SS));printf("请输入第%d个学生的学号和成绩:",i);
scanf("%d,%f",&p->num,&p->grade);
q->next=p;
q=p;
}
q->next=NULL;
return(head);
}
SS*sort(SS*head)
{SS*p,*q,*m,*x,*w=NULL;
int i,j;
m=x=(SS*)malloc(sizeof(SS));
m->next=head;
head=m;
for(i=1;i {m=x=head; p=q=m->next; for(j=1;j<=n-i;j++) {if((p->next->grade)>(q->grade)) {q=p->next; x=p; } p=p->next; m=m->next; } if((p!=q)&&(m!=q)) {w=p->next; x->next=p; m->next=q; p->next=q->next; q->next=w; } if((p!=q)&&(m==q)) {q->next=p->next; x->next=p; p->next=q; } } m=head; head=m->next; free(m); return(head); } void print(SS*head) {SS*p; printf("学号成绩\n"); for(p=head;p!=NULL;) { printf("%d%5.2f\n",p->num,p->grade); p=p->next; } } main() {SS*head=NULL; printf("请输入你要建立的链表节数n:"); scanf("%d",&n); head=creat(); print(head); head=sort(head); printf("排序后的链表为:\n"); print(head); }