数据结构day3

一、思维导图

二、顺序表实现学生管理系统

//头文件

#ifndef TEST_H
#define TEST_H
#define MAX_SIZE 100//定义学生类型
typedef struct
{char name[20]; 		//姓名int age; 			//年龄double score; 		//分数
}datatype;//定义班级类型
typedef struct
{datatype student[MAX_SIZE]; 	//定义学生容器int size; 		 		//实际学生人数
}class,*class_ptr;//函数声明
//创建班级函数
class_ptr Create_Stu();//判空函数
int Empty(class_ptr P);//判满函数
int Full(class_ptr P);//信息录入
int Enter_Stu(class_ptr P);//学生信息输出
void Print_Stu(class_ptr P);//按姓名查找学生位置
int Search_name(class_ptr P,const char *ptr);//按位置输出学生信息
void Print_pos(class_ptr P,int pos);//按位置修改学生新信息
int Update_pos(class_ptr P,int pos);//按位置删除学生信息
int Delete_pos(class_ptr P,int pos);//学生信息去重
int Unique(class_ptr P);//按成绩降序排序
void Sort_Stu(class_ptr P);//输出成绩最值学生信息
void Print_Best(class_ptr P);//销毁班级容器
void destroy(class_ptr P);#endif

//功能函数

#include <myhead.h>
#include "sys.h"//创建班级
class_ptr Create_Stu()
{//申请堆区空间class_ptr P = (class_ptr)malloc(sizeof(class));if(NULL == P){printf("创建失败\n");return NULL;}//申请成功//给申请空间初始化memset(P,0,sizeof(class));P->size =0;//将内存地址返回printf("创建班级成功\n");return P;
}//判空函数
int Empty(class_ptr P)
{return P->size ==0;    
}//判满函数
int Full(class_ptr P)
{return P->size ==MAX_SIZE;    
}//信息录入
int Enter_Stu(class_ptr P)
{//判断合法性if(NULL == P || Full(P)){printf("error\n");return -1 ;}//录入学生信息printf("请输入学生姓名:");scanf("%s",P->student[P->size].name);getchar();printf("请输入学生年龄:");scanf("%d",&P->student[P->size].age);getchar();printf("请输入学生成绩:");scanf("%lf",&P->student[P->size].score);getchar();printf("\n");//录入完成//长度增加P->size++;printf("录入成功\n");return 0;
}//学生信息输出
void Print_Stu(class_ptr P)
{//判断合法性if(NULL == P || Empty(P)){printf("error\n");return;}//循环输出学生信息printf("**********学生信息如下*********\n");printf("姓名\t年龄\t成绩\n\n");for(int i=0;i<P->size;i++){printf("%s\t%d\t%lf\n",\P->student[i].name,P->student[i].age,P->student[i].score);printf("\n");}
}//按姓名查找学生位置
int Search_name(class_ptr P,const char *ptr)
{//判断合法性if(NULL == P || Empty(P)){printf("error\n");return 0 ;}//遍历查找for(int i =0;i<P->size;i++){if(strcmp(P->student[i].name , ptr ) == 0){//查找成功,返回下标 return i;}   }return -1;
}//按位置输出学生信息
void Print_pos(class_ptr P,int pos)
{//判断合法性if(NULL == P || Empty(P) || pos < 0 || pos>P->size){printf("error\n");return ;}//输出信息printf("**********学生信息如下*********\n");printf("姓名\t年龄\t成绩\n\n");printf("%s\t%d\t%lf\n",\P->student[pos].name,P->student[pos].age,P->student[pos].score);printf("\n");
}//按位置修改学生新信息
int Update_pos(class_ptr P,int pos)
{//判断合法性if(NULL == P  || pos < 0 || pos>P->size){printf("error\n");return -1;}//按位置重新输入刷新学生信息printf("请输入新学生姓名:");scanf("%s",P->student[pos].name);getchar();printf("请输入新学生年龄:");scanf("%d",&P->student[pos].age);getchar();printf("请输入新学生成绩:");scanf("%lf",&P->student[pos].score);getchar();printf("修改成功\n");return 0;
}//按位置删除学生信息
int Delete_pos(class_ptr P,int pos)
{//判断合法性if(NULL == P  || Full(P) || pos < 0 || pos>P->size){printf("error\n");return -1;}//删除for(int i=pos+1;i<P->size;i++){P->student[i-1] =  P->student[i];}//删除成功P->size--;printf("删除成功\n");return 0;
}//学生信息去重//按成绩降序排序
void Sort_Stu(class_ptr P)
{//判断合法性if(NULL == P || Full(P)){printf("error\n");return;}printf("************对学生成绩进行排序***********\n");   for(int i=1;i<P->size;i++){for(int j=0;j<P->size;j++){if(P->student[j].score < P->student[j+1].score){//交换位置datatype temp = P->student[j];P->student[j] = P->student[j+1];P->student[j+1] = temp;}}}//排序成功printf("排序成功\n");
}//输出成绩最值学生信息
void Print_Best(class_ptr P)
{//判断是否成功申请内存if(NULL == P){printf("error\n");return ;}//定义最值学生容器datatype stu_max;datatype stu_min;//定义最值分数容器double max_score = 0;double min_socre = 0;//将第一个学生当做最值stu_max = *P->student;stu_min = *P->student;max_score = P->student[0].score;min_socre = P->student[0].score;//循环比较刷新最值for(int i=1;i<P->size;i++){if(P->student[i].score > max_score){max_score = P->student[i].score;stu_max = P->student[i];}if(P->student[i].score < min_socre){min_socre = P->student[i].score;stu_min = P->student[i];}}//输出成绩最值学生信息printf("************成绩最值学生信息************\n");printf("成绩最高学生信息:\n");printf("姓名\t年龄\t成绩\n\n");printf("%s\t%d\t%lf\n",\stu_max.name,stu_max.age,stu_max.score);printf("成绩最低学生信息:\n");printf("姓名\t年龄\t成绩\n\n");printf("%s\t%d\t%lf\n",\stu_min.name,stu_min.age,stu_min.score);
}//销毁班级容器
void destroy(class_ptr P)
{//释放内存if(P != NULL){free(P);P = NULL;}
}

//主函数

#include <myhead.h>
#include "sys.h"int  main(int argc, const char *argv[])
{printf("\t\t************学生信息管理系统************\n");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=======6、      删除学生信息        =======\n");printf("\t\t=======7、   学生成绩降序排序       =======\n");printf("\t\t=======8、  输出成绩最值学生信息    =======\n");			printf("\t\t=======9、       销毁班级           =======\n");			printf("\t\t=======0、         退出             =======\n");			//菜单int menu =0;char value[20];//定义指针接收申请的班级结构体内存class_ptr P = NULL;do{printf("请输入选项>>>");scanf("%d",&menu);getchar();//多分支选择执行对应功能switch(menu){case 1://创建班级//指针接收申请的班级结构体内存P =Create_Stu();break;case 2://录入学生信息Enter_Stu(P);break;case 3://浏览学生信息Print_Stu(P);break;case 4://查找学生信息{printf("请输入您需要查找的学生姓名:");scanf("%s",value);getchar();//按姓名查找学生位置int res4 = Search_name(P,value);//按位置输出学生信息Print_pos( P,res4);}break;case 5://修改学生信息 {printf("请输入您需要修改的学生姓名:");scanf("%s",value);getchar();//按姓名查找学生位置int res5 = Search_name(P,value);//按位置修改学生新信息Update_pos(P,res5);}break;case 6://删除学生信息 {printf("请输入您需要删除的学生姓名:");scanf("%s",value);getchar();//按姓名查找学生位置int res6 = Search_name(P,value);//按位置删除学生新信息Delete_pos(P,res6);}break;case 7://按成绩降序排序Sort_Stu(P);//输出排序后信息Print_Stu(P);break;case 8://输出成绩最值学生信息Print_Best(P);break;case 9://销毁班级容器destroy(P);P = NULL;printf("销毁成功\n");break;case 0://退出break;default:printf("输入错误,请重新输入\n");break;}} while(menu !=0);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CDGA数据治理:突破卡点堵点,解决确权难、流通交易难问题

随着大数据时代的来临&#xff0c;数据已成为推动社会进步和经济发展的重要力量。然而&#xff0c;数据治理中的卡点堵点问题&#xff0c;特别是确权难、流通交易难&#xff0c;正成为制约数据要素市场健康发展的瓶颈。本文将探讨这些问题&#xff0c;并提出相应的解决方案。 确…

uniapp写登陆|微信小程序登录和微信h5登录使用同一个页面

文章目录 导文微信小程序登录先写一个样式代码实现详细解释&#xff1a; 微信h5登录先写一个样式代码实现1. checkWeChatCode()2. getWeChatCode()页面获取登陆后的code 导文 微信小程序登录怎么实现&#xff1f; 微信h5登录怎么实现&#xff1f; 用uniapp写同一个页面&#xf…

CloudCampus的三种部署模式

CloudCampus的三种部署模式 本地部署 客户购买控制器 自己运营 软件永久license sns &#xff0c;将软件补丁、软件升级&#xff08;含升级版本的新特性&#xff09;、远程支持等打包在一起组成SnS年费 msp自建云部署 msp 购买控制器 msp运营 …

测试数据科学家深度学习基础知识的 45 个问题(以及解决方案)

测试数据科学家深度学习基础知识的 45 个问题(以及解决方案) 一、介绍 早在2009年, 深度学习还只是一个新兴领域。只有少数人认为这是一个富有成效的研究领域。今天,它被用于开发应用程序,这些应用程序在一段时间前被认为是困难或不可能做到的。 语音识别、图像识别、在数…

《云原生安全攻防》-- 容器攻击案例:镜像投毒与Fork炸弹

在本节课程中&#xff0c;我们将介绍两个比较有意思的容器攻击案例&#xff0c;镜像投毒与Fork炸弹。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; 镜像投毒&#xff1a;构建恶意镜像&#xff0c;诱导用户拉取镜像创建容器。 Fork炸弹&#xff1a;Fork炸弹的攻击…

sql常见50道查询练习题

sql常见50道查询练习题 1. 表创建1.1 表创建1.2 数据插入 2. 简单查询例题(3题&#xff09;2.1 查询"李"姓老师的数量2.2 查询男生、女生人数2.3 查询名字中含有"风"字的学生信息 3. 日期相关例题(6题&#xff09;3.1 查询各学生的年龄3.2 查询本周过生日的…

redis的学习(二):常见数据结构及其方法

简介 redis常见的数据结构和他们的常用方法 redis的数据结构 redis是一个key-value的nosql&#xff0c;key一般是字符串&#xff0c;value有很多的类型。 j基本类型&#xff1a; stringhashlistsetsortedSet 特殊类型&#xff1a; GEOBitMapHyperLog key的结构 可以使用…

MacOS M1 安装item2 并配置Zsh

文章目录 1 下载item22 美化item22.1 配置主题2.2 设置黑色的主题&#xff1a;2.3 配置显示状态栏 status bar 3 安装 Oh my zsh3.1 设置主题3.2 设置插件3.3 安装第三方插件1 下载仓库解压2 使用 git clone 一些常用插件以及其作用 参考 1 下载item2 MacOS自带终端&#xff0…

ontap simulator配置过程

一、下载模拟器 参考《Simulate_ONTAP_9-14-1_Installation_and_Setup_Guide.pdf》P4的指导&#xff0c;登录网站进行下载。 二、传入pve&#xff0c;并解压转换 # 解压 tar -xvf vsim-netapp-DOT9.14.1-cm_nodar.ova# 解压后的文件列表&#xff0c;其中ovf文件里定义了虚拟机…

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换 背景&#xff1a;uniapp做的微信小程序&#xff0c;使用到了相机拍照并获取位置坐标信息&#xff1b;在腾讯地图上展示坐标点位置信息&#xff1b; 由于业务需要我们的PC端用的不是腾讯地图&#xff0c;需要使用WGS84坐标或…

《0基础》学习Python——第二十三讲__网络爬虫/<6>爬取哔哩哔哩视频

一、在B站上爬取一段视频&#xff08;B站视频有音频和视频两个部分&#xff09; 1、获取URL 注意&#xff1a;很多平台都有反爬取的机制&#xff0c;B站也不例外 首先按下F12找到第一条复制URL 2、UA伪装&#xff0c;下列图片中&#xff08;注意代码书写格式&#xff09; 3、Co…

ViT(Vision Transformer)网络结构详解

本文在transformer的基础上对ViT进行讲解&#xff0c;transformer相关部分可以看我另一篇博客&#xff08;transformer中对于QKV的个人理解-CSDN博客&#xff09;。 一、网络结构概览 上图展示了Vision Transformer (ViT) 的基本架构&#xff0c;我按照运行顺序分为三个板块进…

Rancher

文章目录 Rancher1. 安装和配置2. 服务部署和管理3. 容器自动化缩容和扩容 Rancher Rancher 是一个开源的企业级容器管理平台&#xff0c;旨在简化容器化应用的部署、管理和运维。它支持多种容器编排引擎&#xff0c;如 Kubernetes、Docker Swarm 等&#xff0c;并提供了统一的…

自动驾驶系统开发与调试:车路云一体化无人驾驶挑战赛参赛体验

点击蓝字 关注我们 在过去的几年里&#xff0c;自动驾驶技术在全球范围内吸引了大量关注。其潜力不仅在于提升行车安全&#xff0c;而且还可以改变我们的出行方式和城市规划&#xff0c;提高交通运输效率。国际汽车工程师学会&#xff08;SAE&#xff09;根据不同自动驾驶程度&…

JAVA在线文档

1.存在码 JDK21中文API 2.全栈行动派 JDK17中文API 3.mklab.cn JDK11中文API JDK8中文API JDK7-21英文API 4.docs.oracle.com JDK7-22英文文档

项目笔记| 基于Arduino和IR2101的无刷直流电机控制器

本文介绍如何使用 Arduino UNO 板构建无传感器无刷直流 &#xff08;BLDC&#xff09; 电机控制器或简单的 ESC&#xff08;电子速度控制器&#xff09;。 无刷直流电机有两种类型&#xff1a;有传感器和无传感器。有感无刷直流电机内置3个霍尔效应传感器&#xff0c;这些传感…

MLIR的TOY教程学习笔记

MLIR TOY Language 文章目录 MLIR TOY Language如何编译该项目ch1: MLIR 前端IR解析ch2: 定义方言和算子 (ODS)1. 定义方言2. 定义OP3. OP相关操作4. 定义OP ODS (Operation Definition Specification)1. 基本定义2. 添加文档3. 验证OP4. 新增构造函数5. 定义打印OP的格式 ch3:…

【机器学习】超参数选择:解锁机器学习模型潜力的关键

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 超参数选择&#xff1a;解锁机器学习模型潜力的关键引言什么是超参数&#xff1…

计算机的错误计算(三十八)

摘要 计算机的错误计算&#xff08;十九&#xff09;指出&#xff1a;两个等价大数相减&#xff0c;差不是正确值0&#xff0c;而是一个大数。本节用 Python的 torch库中函数进行计算验证&#xff0c;进一步说明错误的一般性。 例1. 在Windows10&#xff0c;Python 3.12.4 下…

Android APP Camerax应用(02)预览流程

说明&#xff1a;camera子系统 系列文章针对Android12.0系统&#xff0c;主要针对 camerax API框架进行解读。 1 CameraX简介 1.1 CameraX 预览流程简要解读 CameraX 是 Android 上的一个 Jetpack 支持库&#xff0c;它提供了一套统一的 API 来处理相机功能&#xff0c;无论 …