本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。

函数接口定义:

  1. struct stud_node *createlist();
  2. struct stud_node *deletelist( struct stud_node *head, int min_score );

函数createlist利用scanf从输入中获取学生的信息,将其组织成单向链表,并返回链表头指针。链表节点结构定义如下:

  1. struct stud_node {
  2. int num; /*学号*/
  3. char name[]; /*姓名*/
  4. int score; /*成绩*/
  5. struct stud_node *next; /*指向下个结点的指针*/
  6. };

输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。

函数 deletelist 从以 head 为头指针的链表中删除成绩低于 min_score 的学生,并返回结果链表的头指针。

裁判测试程序样例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct stud_node {
  5. int num;
  6. char name[];
  7. int score;
  8. struct stud_node *next;
  9. };
  10.  
  11. struct stud_node *createlist();
  12. struct stud_node *deletelist( struct stud_node *head, int min_score );
  13.  
  14. int main()
  15. {
  16. int min_score;
  17. struct stud_node *p, *head = NULL;
  18.  
  19. head = createlist();
  20. scanf("%d", &min_score);
  21. head = deletelist(head, min_score);
  22. for ( p = head; p != NULL; p = p->next )
  23. printf("%d %s %d\n", p->num, p->name, p->score);
  24.  
  25. return ;
  26. }
  27.  
  28. /* 你的代码将被嵌在这里 */

输入样例:

  1. zhang
  2. wang
  3. li
  4. zhao

输出样例:

  1. wang
  2. zhao

思路:这道题目的思路很简单,每输入一组数据,将该组数据存到一个临时结点,再将这个结点与链表进行正确连接;删除时从头历遍链表,删除score<min_score 的结点。

但是,这道题我却做了一节课,原因就是 对于每次输入的数据,我没有将它存到一个新创建的临时结点,自始至终都存到了同一片空间,导致链表链接有问题。

代码:

  1. struct stud_node *createlist(){
  2. int tem=;
  3. struct stud_node *firstnode=NULL,*endnode=NULL;
  4. struct stud_node *temnode=(struct stud_node *)malloc(sizeof(struct stud_node));
  5. while(scanf("%d", &temnode->num)&&temnode->num){
  6. scanf("%s %d", &temnode->name,&temnode->score);
  7. temnode->next=NULL;
  8. if(tem==){
  9. tem=;
  10. firstnode=endnode=temnode;
  11. }
  12. else{
  13. endnode->next=temnode;
  14. endnode=endnode->next;
  15. }
  16. temnode=(struct stud_node *)malloc(sizeof(struct stud_node));//问题关键,之前少写了这句话
  17. }
  18. return firstnode;
  19. }
  20. struct stud_node *deletelist( struct stud_node *head, int min_score ){
  21. while(head&&head->score<min_score)
  22. head=head->next;
  23. if(head==NULL)
  24. return NULL;
  25. struct stud_node *temnode=head->next;
  26. struct stud_node *prenode=head;
  27. while(temnode!=NULL){
  28. if(temnode->score<min_score)
  29. prenode->next=temnode->next;
  30. else
  31. prenode=prenode->next;
  32. temnode=temnode->next;
  33. }
  34. return head;
  35. }

PTA 学生成绩链表处理(C语言)的更多相关文章

  1. 【学生成绩管理系统】 大二c语言作业

    几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值... #include <cstdio> #include <conio.h> #include <i ...

  2. 学生成绩管理C语言版

    [标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数 ...

  3. C语言文件实现学生成绩管理

    C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...

  4. [项目记录] 用c语言完成的一个学生成绩管理系统

    一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信 ...

  5. C语言项目:学生成绩管理系统

    C语言项目:学生成绩管理系统    1.数据结构:学生信息:学号.姓名.年龄.性别.3课成绩    2.功能:   (1)增加学生记录    (2)  删除学生记录    (3)  查找学生信息(学号 ...

  6. C语言实现---学生成绩管理系统

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...

  7. 第一次写C语言小程序,可以初步理解学生成绩管理系统的概念

    1 成绩管理系统概述 1.1  管理信息系统的概念  管理信息系统(Management Information Systems,简称MIS),是一个不断发展的新型学科,MIS的定义随着科技的进步也在 ...

  8. Problem X: C语言习题 学生成绩输入和输出

    Problem X: C语言习题 学生成绩输入和输出 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4722  Solved: 2284[Submit] ...

  9. YTU 2429: C语言习题 学生成绩输入和输出

    2429: C语言习题 学生成绩输入和输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 1897  解决: 812 题目描述 编写一个函数print,打印一个学生的成绩数组,该数组中有 ...

随机推荐

  1. ros中launch启动文件的使用方法

    launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master) launch文件中包含很多标签和属性 *launch文件语法 <launch> <node ...

  2. JavaScript 替换所有匹配内容

    由于JavaScript 的 replace 只能替换一次,因此另外编写一个能现替换全部匹配内容方法,代码如下: /*把 content 中所有的 searchValue 替换为 replaceVal ...

  3. c++引用深入探讨

    (偶然翻起自己的旧博,忽然发现大三的时候写的这篇文章,仔细看看觉得写的还是那么回事,所以赶紧搭救出来) 引用的声明:   基本格式:引用类型 &引用名=被引用对象 &运算符:声明运算符 ...

  4. 文件(file 类)

    题目: 编写一个应用程序,输入一个目录和一个文件类型,显示该目录下符合该类型的所有文件.之后,将这些文件中的某一个文件剪切到另外一个目录中. 代码: File_Demo /** * 包含两个类,一个主 ...

  5. [travis-ci]自动集成测试

    自动运行测试的平台https://travis-ci.org/ 可以自动导入测试github上的项目 因为yml文件格式错误会导致找不到配置文件, 这里要注意啦, 掉坑里了.... https://d ...

  6. sqlserver install on linux chapter two

    The previous chapter is tell us how to install sqlerver on linuix Today, we will see how to make it ...

  7. 极简估值教程——第一篇 速判估值与PEG的推导

    来自盛京剑客的雪球原创专栏 一.极简速判估值怎么判? 很简单.简单到粗暴. 用PEG PEG=PE/(g*100)=1.0 什么意思? PE市盈率,g未来收益增长率,PEG为1.0合理估值,大于1.0 ...

  8. TCP/IP分为几层?各层的作用是什么?

    1. 应用层 2.传输层 3.网络层 4.网络接口层* 1.应用层 TCP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议.如我们进 ...

  9. vue-cli3点滴

    1.如果你不在构造函数中声明private的变量,那么久会提示错误. 2.

  10. [未完成]ECRound 80

    Educational Codeforces Round 80 (Rated for Div. 2)A 大意:寻找x使得等式<=n,若满足情况输出YES否则NO 解法:纯数学题,先构造函数f(x ...