C语言链表排序范例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

相关文档
最新文档