【C语言】 链表实现学生管理系统(堆区开辟空间)
总体思路都能写出来,问题是感觉稍微比之前的麻烦一些,在刚开始创建结构体的时候,并没有去按照链表的思路去写,导致写成了顺序表,后面就一直纠结空间怎么开辟。
链表是由一个头节点和其它申请出来的小节点连起来的,需要分开开辟空间,然后进行连接等等的操作。需要先申请节点,为了方便就封装一个申请节点的函数,然后再实现功能的时候去调用就行
还有一个点,在后期遇到一个问题,不管我输入什么东西,打印数据的时候,我的最后一个数据不知道为什么会一直加一,后面发现是我在声明变量的时候写了ClassPtr Class,然后这个Class和我结构体的Class冲突了,但是很奇怪并没有报错,但是确实是这个问题导致我的代码输出时候莫名增1,不是很懂。以后定义变量的时候还是得尽量避免重复吧,反正这次重复了并没报错,也没警告,但是代码就是功能实现有问题,记录一下吧。
//link_list.h
#ifndef LINK_LIST_H
#define LINK_LIST_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>#define MAX 100//学生信息
typedef struct Stu
{char name[20];int age;double score;
}Stu,*StuPtr;//班级管理
typedef struct Class
{Stu student;int len;struct Class *next;
}Class,*ClassPtr;//创建管理视图
void create_view();//创建班级链表
ClassPtr link_class_create();//申请学生信息结点
ClassPtr link_apply_node(Stu student);//头插 插入学生信息
int link_insert_student(ClassPtr Class,Stu student);//遍历学生信息
int link_printf_student(ClassPtr Class);//按位置查找学生结点
ClassPtr link_search_student_pos(ClassPtr Class,int pos);//按位置插入学生信息
int link_insert_student_pos(ClassPtr Class,int pos,Stu student);#endif
//link_list.c
#include "link_list.h"//创建管理视图
void create_view()
{printf("\t\t======1.创建班级\n");printf("\t\t======2.录入学生信息\n");printf("\t\t======3.输出所有学生信息\n");printf("\t\t======4.按位置插入学生信息\n");printf("\t\t======5.销毁班级\n");printf("\t\t======0.退出\n");
}//创建班级链表
ClassPtr link_class_create()
{ClassPtr class_ptr = (ClassPtr)malloc(sizeof(Class)); //在堆区申请空间if(class_ptr == NULL){printf("班级链表创建失败\n");return NULL;}class_ptr->len = 0;class_ptr->next = NULL;printf("班级创建成功\n");putchar(10);return class_ptr;
}//申请学生信息结点
ClassPtr link_apply_node(Stu student)
{ClassPtr p = (ClassPtr)malloc(sizeof(Class));if(p == NULL){printf("结点创建失败\n");return NULL;}p->student = student;p->next = NULL;return p;
}//头插 插入学生信息
int link_insert_student(ClassPtr class_ptr,Stu student)
{if(class_ptr == NULL){printf("插入失败\n");return -1;}ClassPtr p = link_apply_node(student);p->next = class_ptr->next;class_ptr->next = p;class_ptr->len++;printf("插入成功\n");return 0;
}//遍历学生信息
int link_printf_student(ClassPtr class_ptr)
{if(NULL == class_ptr){printf("遍历失败\n");return -1;}ClassPtr q = class_ptr->next;while(q){printf("%s\t%d\t%.2lf\n",q->student.name,q->student.age,q->student.score);q = q->next;}putchar(10);return 0;
}//按位置查找学生结点
ClassPtr link_search_student_pos(ClassPtr Class,int pos)
{if(NULL == Class || pos < 0 || pos > Class->len){printf("查找失败\n");return NULL;}ClassPtr q = Class;for(int i = 0;i < pos;i++){q = q->next;}return q;
}//按位置插入学生信息
int link_insert_student_pos(ClassPtr class_ptr,int pos,Stu student)
{if(NULL == class_ptr){printf("插入失败\n");return -1;}ClassPtr p = link_apply_node(student);ClassPtr q = link_search_student_pos(class_ptr,pos-1);p->next = q->next;q->next = p;class_ptr->len++;printf("插入成功\n");return 0;
}
//main.c
#include "link_list.h"
int main(int argc, char const *argv[])
{int n = 0,pos = 0;ClassPtr class_ptr;Stu student;while(1){create_view();printf("请输入您需要实现的功能:");scanf("%d",&n);getchar();switch (n){case 1:class_ptr = link_class_create();break;case 2:printf("请输入你需要插入的学生姓名:");scanf("%s",student.name);printf("请输入你需要插入的学生年龄:");scanf("%d",&student.age);printf("请输入你需要插入的学生成绩:");scanf("%lf",&student.score);getchar();link_insert_student(class_ptr,student);break;case 3:printf("姓名\t年龄\t成绩\n");link_printf_student(class_ptr);break;case 4:printf("请输入你需要插入第几个位置:");scanf("%d",&pos);printf("请输入你需要插入的学生姓名:");scanf("%s",student.name);printf("请输入你需要插入的学生年龄:");scanf("%d",&student.age);printf("请输入你需要插入的学生成绩:");scanf("%lf",&student.score);link_insert_student_pos(class_ptr,pos,student);break;case 0:goto END;break;default:break;}}END:return 0;
}
输出结果如下:





相关文章:
【C语言】 链表实现学生管理系统(堆区开辟空间)
总体思路都能写出来,问题是感觉稍微比之前的麻烦一些,在刚开始创建结构体的时候,并没有去按照链表的思路去写,导致写成了顺序表,后面就一直纠结空间怎么开辟。 链表是由一个头节点和其它申请出来的小节点连起来的&…...
STM32实战篇:按键(外部输入信号)触发中断
功能要求 将两个按键分别与引脚PA0、PA1相连接,通过按键按下,能够触发中断响应程序(不需明确功能)。 代码流程如下: 实现代码 #include "stm32f10x.h" // Device headerint main() {//开…...
Android SurfaceView 组件介绍,挖洞原理详解
文章目录 组件介绍基本概念关键特性使用场景 SurfaceHolder介绍主要功能使用示例 SurfaceView 挖洞原理工作机制 使用SurfaceView展示图片示例创建一个自定义的 SurfaceView类在 Activity 中使用 ImageSurfaceView注意事项效果展示 组件介绍 在 Android 开发中,Sur…...
day2加餐 Go 接口型函数的使用场景
文章目录 问题价值使用场景其他语言类似特性 问题 在 动手写分布式缓存 - GeeCache day2 单机并发缓存 这篇文章中,有一个接口型函数的实现: // A Getter loads data for a key. type Getter interface {Get(key string) ([]byte, error) }// A Getter…...
摄像头 RN6752v1 视频采集卡
摄像头 AHD倒车摄像头比较好,AHD英文全名Analog High Definition,即模拟高清,拥有比较好的分辨率与画面质感。 RN6752v1 GQW AKKY2 usb 采集卡 FHD(1080p)、HD(720p)和D1(480i&am…...
记录vivado自带IP iBert眼图近端回环
记录利用vivado自带IP核工具测试信号质量 ibert是测试眼图的工具,在使用的时候并不用改太多的内容,只需要注意参考时钟及所需要的引脚即可。由于条件的限制,并没有使用光纤和电缆进行连接进行外部回环,仅使用内部回环做测试&…...
js | Core
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ Object 是什么? 属性[[prototype]]对象。 例如,下面的,son是对象,foo不是对象。打印出来的son,能看到有一个prototype 对象。 prototype vs _proto_ v…...
Log4J reminder
Java JNDI and Log injection https://docs.oracle.com/javase/jndi/tutorial/ See also https://telegra.ph/Log4J-Vulnerability-Explained-07-21...
Unity XR Interaction Toolkit(VR、AR交互工具包)记录安装到开发的流程,以及遇到的常见问题(一)!
提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、XR Interaction Toolkit是什么?二、跨平台交互三、 AR 功能四、XR Interaction Toolkit的特点五、XR Interaction Toolkit 示例总结 前言 随着VR行业的发展&#…...
MongoDB文档整理
过往mongodb文档: https://blog.csdn.net/qq_46921028/article/details/123361633https://blog.csdn.net/qq_46921028/article/details/131136935https://blog.csdn.net/qq_46921028/article/details/139247847 1. MongoDB前瞻 1、MongoDB概述: MongoDB是…...
【AI学习】关于Scaling Law的相关学习
一、苦涩的教训 首先,学习一段重要话语: The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…...
学习小记-Kafka相较于其他MQ有啥优势?
Kafka 相比于 RocketMQ 有以下几个优势: 1. 高吞吐量和低延迟: Kafka 以其出色的 I/O 性能和分布式架构设计,能够实现极高的吞吐量,每秒数百万的消息处理能力,适合大规模数据流处理。同时,Kafka 设计为…...
技能 | postman接口测试工具安装及使用
哈喽小伙伴们大家好!今天来给大家分享一款轻量级,高效好用的接口测试工具-postman. Postman是一个流行的API开发工具,主要用于测试、开发和文档化API。以下是关于Postman的介绍及其主要使用场景: Postman介绍: 1. 功能丰富的API客户端&#…...
移动UI:任务中心的作用,该如何设计更合理?
任务中心是移动应用中用于展示和管理用户待办任务、提醒事项、用户福利、打卡签到等内容的功能模块。合理设计任务中心可以提升用户体验和工作效率。 以下是一些设计任务中心的合理建议: 1. 易于查看和管理: 任务中心的设计应该使用户能够快速、直观地…...
pytorch学习(十)优化函数
优化函数主要有,SGD, Adam,RMSProp这三种,并且有lr学习率,momentum动量,betas等参数需要设置。 通过这篇文章,可以学到pytorch中的优化函数的使用。 1.代码 代码参考《python深度学习-基于pytorch》&…...
Ubuntu22.04:安装Samba
1.安装Samba服务 $ sudo apt install samba samba-common 2.创建共享目录 $ mkdir /home/xxx/samba $ chmod 777 /home/xxx/samba 3.将用户加入到Samba服务中 $ sudo smbpasswd -a xxx 设置用户xxx访问Samba的密码 4.配置Samba服务 $ sudo vi /etc/samba/smb.conf 在最后加入 …...
Powershell 使用介绍
0 Preface/Foreword 0.1 参考文档 Starting Windows PowerShell - PowerShell | Microsoft Learn 1 Powershell 介绍 2 命令介绍 2.1 新建文件夹 New-Item -Path C:\GitLab-Runner -ItemType Directory 2.2 切换路径 cd C:\GitLab-Runner 2.3 下载文件 Invoke-WebRequ…...
【Langchain大语言模型开发教程】记忆
🔗 LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…...
最新Qt6的下载与成功安装详细介绍
引言 Qt6 是一款强大的跨平台应用程序开发框架,支持多种编程语言,最常用的是C。Qt6带来了许多改进和新功能,包括对C17的支持、增强的QML和UI技术、新的图形架构,以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…...
LeetCode 热题 HOT 100 (001/100)【宇宙最简单版】
【链表】 No. 0160 相交链表 【简单】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
