单链表实现学生成绩统计每个学生包含姓名、性别、学号、成绩的输入,至少输入10个学生,并将成绩按照男女分离形成两个单链表,并对两个单链表进行排序。
4条回答 默认 最新
- qfl_sdu 2022-05-26 14:46关注
C代码运行结果如下:
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> typedef struct _Student { int id; //学号 char name[20];//姓名 char sex; //性别 int score; //成绩 struct _Student* next; }Student; //初始化链表头 Student* initList(Student* list) { list = (Student*)malloc(sizeof(Student)); list->next = 0; return list; } //头插法创建链表 void createList(Student* list) { int i, n; Student* t,*p; p = list; printf("请输入需要插入的学生数量:"); scanf("%d", &n); for (i = 0; i < n; i++) { t = (Student*)malloc(sizeof(Student)); t->next = 0; printf("请输入第%d个学生的学号:", i + 1); scanf("%d", &t->id); printf("请输入第%d个学生的姓名:", i + 1); scanf("%s", t->name); getchar();//吸收回车符 printf("请输入第%d个学生的性别(F/M):", i + 1); scanf("%c", &t->sex); printf("请输入第%d个学生的成绩:", i + 1); scanf("%d", &t->score); //插入头插法插入链表 p->next = t; p = t; } } //遍历输出学生信息 void showList(Student* list) { Student* p; if (list == 0) return; p = list->next; while (p) { printf("%8d %20s %c %3d\n", p->id, p->name, p->sex, p->score); p = p->next; } } //分隔链表 void splitList(Student* plistA, Student* plistB) { Student* pre = plistA; Student* p = pre->next; Student* pb = plistB; while (p) { if (p->sex == 'M') { pre->next = p->next; //把p从listA中删除 //把p插入listB p->next = 0; pb->next = p; pb = p; //重置p,继续循环 p = pre->next; } else { pre = p; p = p->next; } } } //根据成绩排序 void sortById(Student* L) { Student* p, * tail, * q; tail = NULL; while ((L->next->next) != tail) { p = L; q = L->next; while (q->next != tail) { if (q->score > q->next->score) //升序排列 /降序 { p->next = q->next; q->next = q->next->next; p->next->next = q; q = p->next; } q = q->next; p = p->next; } tail = q; } } int main() { Student* listA = 0; Student* listB = 0; listA = initList(listA); listB = initList(listB); //输入数据并创建链表 createList(listA); showList(listA); //分成两个链表 splitList(listA, listB); printf("分隔后的女生链表为:\n"); showList(listA); printf("分隔后的男生链表为:\n"); showList(listB); //排序 sortById(listA); sortById(listB); printf("排序后的女生链表为:\n"); showList(listA); printf("排序后的男生链表为:\n"); showList(listB); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 酬劳2w元求合作写文章
- ¥15 在现有系统基础上增加功能
- ¥15 远程桌面文档内容复制粘贴,格式会变化
- ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
- ¥15 这种微信登录授权 谁可以做啊
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图