题目:

假设全校有最多40000名学生和最多2500门课程。现给出每个学生的选课清单,要求输出每门课的选课学生名单。

输入格式:
输入的第一行是两个正整数:N(≤40000),为全校学生总数;K(≤2500),为总课程数。此后N行,每行包括一个学生姓名(3个大写英文字母+1位数字)、一个正整数C(≤20)代表该生所选的课程门数、随后是C个课程编号。简单起见,课程从1到K编号。

输出格式:
顺序输出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号和选课学生总数(之间用空格分隔),之后在第二行按字典序输出学生名单,每个学生名字占一行。

输入样例:

10 5
ZOE1 2 4 5
ANN0 3 5 2 1
BOB5 5 3 4 2 1 5
JOE4 1 2
JAY9 4 1 2 5 4
FRA8 3 4 2 5
DON2 2 4 5
AMY7 1 5
KAT3 3 5 4 2
LOR6 4 2 4 1 5

输出样例:

1 4
ANN0
BOB5
JAY9
LOR6
2 7
ANN0
BOB5
FRA8
JAY9
JOE4
KAT3
LOR6
3 1
BOB5
4 7
BOB5
DON2
FRA8
JAY9
KAT3
LOR6
ZOE1
5 9
AMY7
ANN0
BOB5
DON2
FRA8
JAY9
KAT3
LOR6
ZOE1

思路:

1.建立邻接表。

2.邻接表的next为二叉排序树的树根

3.用中序遍历打印结果


代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct a{char name[5];struct a *Lchild,*Rchild;
}Element;typedef struct b{int count;struct a *next;
}ListHead;void InsertList(ListHead *);           // 输入节点
void InsertTree(Element *,Element *);  // 使用二叉排序树储存
void DataPrint(Element *);             // 中序遍历输出int main() {int N,K;scanf("%d %d",&N,&K);ListHead list[K+1];for (int i=0;i<=K;i++){list[i].next=NULL;list[i].count=0;} // 初始化课程链表for (int i=0;i<N;i++) InsertList(list); // 在邻接表中使用二叉排序树for (int i=1;i<=K;i++) {printf("%d %d\n",i,list[i].count);DataPrint(list[i].next);} // 中序遍历输出return 0;
}void InsertList(ListHead *list){char name[5];int n,k;  // n是课程数,  k 是课程名称scanf("%s %d",name,&n);for (int i=0;i<n;i++){scanf("%d",&k);Element *temp=(Element *)malloc(sizeof(Element));strcpy(temp->name,name);temp->Lchild=temp->Rchild=NULL;if (list[k].next==NULL) list[k].next=temp; // 树根是否为空else InsertTree(temp,list[k].next);list[k].count++;}
}void InsertTree(Element *node,Element *head){if (strncmp(node->name,head->name,4)>0) {if (head->Rchild==NULL) {head->Rchild=node;return;}InsertTree(node,head->Rchild);} // 放入右子树else{if (head->Lchild==NULL){head->Lchild=node;return;}InsertTree(node,head->Lchild);} // 放入左子树
}void DataPrint(Element *list){if (list==NULL) return;DataPrint(list->Lchild);printf("%s\n",list->name);DataPrint(list->Rchild);
}

测试结果:

PTA 7-47 打印选课学生名单分数 25 分 (C 邻接表+二叉排序树 )相关推荐

  1. 打印选课学生名单 (25 分)

    假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2500) ...

  2. 7-47 打印选课学生名单(25 分)

    假设全校有最多 40000 名学生和最多 2500 门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2 ...

  3. 7-47 打印选课学生名单 (25 分)

    假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2500) ...

  4. 7-14 打印选课学生名单(25 分)

    假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2500) ...

  5. 7-70 打印选课学生名单 (25 分)

    #include<stdio.h> #include<string.h> int main() {int a[100][10],b[100][1000],i,j,k,n,p,p ...

  6. 打印选课学生名单(25)

    假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为全校学生总数:K(≤2500) ...

  7. 5 打印选课学生名单

    5 打印选课学生名单 分数 25 作者 DS课程组 单位 浙江大学 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一 ...

  8. 打印选课学生名单 (25分)

    打印选课学生名单 (25分) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为 ...

  9. 5 打印选课学生名单 (25分)

    5 打印选课学生名单 (25分) 假设全校有最多40000名学生和最多2500门课程.现给出每个学生的选课清单,要求输出每门课的选课学生名单. 输入格式: 输入的第一行是两个正整数:N(≤40000) ...

最新文章

  1. sbt+Scala IDE建立Scala项目
  2. Educational Codeforces Round 41(已补D,E)
  3. 7-2 旅行售货员 (10 分)(TSP问题思路加详解)
  4. 牛客网--整数与IP地址间的转换
  5. 今年因为疫情很多信用卡逾期,结果会怎么样?
  6. vmware 网络连接方式的说明
  7. 【ACL2019】看 NLP 未来发展趋势
  8. 【转载】卸载Sql Server 2014数据库
  9. linux kernel map
  10. java jxls_jxls教程
  11. 2008年全国计算机软考程序员考试大纲
  12. 如何使用fiddler抓取APP接口
  13. HTML Canvas 刮刮卡抽奖效果的实现
  14. 题源报刊精品阅读-词汇1
  15. 18岁开始学习编程是否来得及?
  16. 9款免费且超实用的响应式网页测试工具
  17. python生成条形码 修改图片大小
  18. python中circle是什么意思_啥是佩奇,让 Python 告诉你!
  19. 论文写作 8: 关键词的写法
  20. Python学习笔记:7.2.2 Django快速建站 - MTV模式

热门文章

  1. 阿里云Api网关导入Swagger功能简介
  2. Uber面向中印开发者公布SDK,支持第三方应用集成服务
  3. 技术人员的职业发展规划思考书单推荐
  4. 一个资深程序员看12306(四)
  5. python 基于Tkinter的姻缘测试器
  6. 托福口语_新航道_刘莹_task 3 task5
  7. MacBook软件安装和更新与卸载
  8. 常见Linux命令pwd实现
  9. 算法竞赛入门经典 习题3-2 分子量 Molar Mass
  10. java.net.UnknownHostException: localhsot