博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
成绩排序
阅读量:5133 次
发布时间:2019-06-13

本文共 2614 字,大约阅读时间需要 8 分钟。

  

题目描述

有N个学生,每个学生的数据包括学号、姓名、成绩,要求按成绩大小输出学生的姓名(若成绩相等,学号小的排名在前)

 

输入

第一行为学生数量N

接下来的N行为每个学生的学号、姓名、成绩

 

输出

学生姓名,每行一个

 

样例输入

44 jx 972 ust 903 acm 971 oj 89

样例输出

acmjxustoj
1 #include 
2 #include
3 #include
4 //创建STUDENT类型变量 包括学号、姓名、成绩 5 typedef struct student { 6 int number; 7 char name[50]; 8 int score; 9 struct student *pNext;10 }STUDENT;11 //创建链表12 STUDENT *Create(int n) {13 STUDENT *pHead, *pEnd, *pNew = NULL;14 int i; 15 pHead = pEnd = (STUDENT*)malloc(sizeof(STUDENT));16 for (i = 0; i < n; i++)17 {18 pNew = (STUDENT*)malloc(sizeof(STUDENT));19 scanf("%d%s%d", &pNew->number, pNew->name, &pNew->score);20 21 pNew->pNext = NULL;22 pEnd->pNext = pNew;23 pEnd = pNew;24 25 }26 return pHead;27 }28 //寻找前驱节点29 STUDENT *Find_before(STUDENT* phead, STUDENT* p)30 {31 if (!p) return NULL;32 STUDENT *pbefore = phead;33 while (pbefore)34 {35 if (pbefore->pNext == p)36 return pbefore;37 pbefore = pbefore->pNext;38 }39 return NULL;40 }41 42 STUDENT *Sort(STUDENT *head) {43 STUDENT *pHead,*pEnd,*q=NULL,*qbefore=NULL,*p=NULL;44 int maxscore,minnumber;45 pHead=pEnd = (STUDENT*)malloc(sizeof(STUDENT));46 while (head->pNext != NULL)47 {48 maxscore = head->pNext->score;49 minnumber = head->pNext->number;50 q = p = head->pNext;51 //寻找最高分且最小学号的节点52 while (p->pNext!=NULL)53 {54 if(maxscore
pNext->score)55 {56 maxscore = p->pNext->score; minnumber = p->pNext->number; q = p->pNext;57 }58 if ((maxscore == p->pNext->score) && (minnumber > p->pNext->number))59 {60 maxscore = p->pNext->score; minnumber = p->pNext->number; q = p->pNext;61 }62 p = p->pNext; 63 }64 qbefore = Find_before(head, q); //寻找q节点的前驱节点65 qbefore->pNext = q->pNext; //将q的前驱节点指向q的后驱节点 从而将q节点从a链表中剔除66 67 pEnd->pNext = q; //将头指针指向q68 q->pNext = NULL; //q节点指向空69 pEnd = q; //更新尾节点70 71 }72 free(head);//释放head链表头节点73 return pHead;74 }75 76 void print(STUDENT *q) {77 while (q->pNext != NULL)78 {79 q = q->pNext; printf("%s\n", q->name);80 }81 free(q);//释放使用完的链表82 }83 int main() {84 int n; STUDENT *p,*q;85 scanf("%d", &n);86 p = Create(n);87 q=Sort(p);88 print(q);89 }

 

转载于:https://www.cnblogs.com/mwq1024/p/10228693.html

你可能感兴趣的文章
推荐2013年最新的10款jquery插件
查看>>
推荐十款来自极客标签的超棒前端特效[第十一期]
查看>>
51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找
查看>>
c# linq <未完>
查看>>
模型选择评估方法
查看>>
Beta 冲刺(4/7)
查看>>
Spring 配置相关
查看>>
深入理解Java:注解(Annotation)基本概念
查看>>
NAT基本原理
查看>>
Java Content Repository API 简介 转自(https://www.ibm.com/developerworks/cn/java/j-jcr/)
查看>>
visio二次开发——图纸解析
查看>>
Activity之间的跳转:
查看>>
iTunes Connect 开发者上手经验(转)
查看>>
vertical-align你为什么不生效
查看>>
request.getReader()的怪异事件
查看>>
C++ 实践总结
查看>>
composer 国内镜像配置
查看>>
软件是天时、地利、人和的产物!
查看>>
python定时清空本目录下除本脚本外的全部文件
查看>>
【PHP】在目标字符串指定位置插入字符串
查看>>