当前位置: 首页 > news >正文

04学生管理系统(栈)

文章目录

    • 预处理
    • 菜单
    • 结构体
    • 主函数
    • 函数声明
    • 栈操作
    • 功能实现

预处理

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>#define OVERFLOW -2
#define FALSE 0
#define TRUE 1
#define OK 1
#define ERROR 0
typedef int Status;
//栈的顺序存储表示#define STACK_INIT_SIZE 100 //存储空间的初始分配量
#define STACKINCREAMENT 10  //存储空间分配增量

菜单

menu()
{printf("\n\n\t\t*******************************************\n");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*             0.退出系统                  *\n");printf("\t\t*******************************************\n");
}

结构体

//栈的元素类型
typedef struct
{char name[10];float score;
}SElemType;typedef struct
{SElemType* base;  //构造之前和销毁之后base的值为NULLSElemType* top;   //栈顶指针int stacksize;    //当前已分配的存储空间
}SqStack;//全局变量
SElemType data;
SqStack stack;

主函数

void main()
{char x;InitStack(&stack);while (1){system("cls");menu();x = getchar();switch (x){case '0':exit(0);case '1':look(); break;case '2':add(); break;case '3':dele(); break;case '4':show(); break;case '5':SelectionSortStack(&stack);printf("排序完成!按任意键继续...");_getch();break;default:break;}}exit(0);
}

函数声明

//基本操作的函数原型声明
Status visit();//输出//构造一个空栈
Status InitStack(SqStack* S);//销毁栈S
Status DestroyStack(SqStack* S);//把S置为空栈
Status ClearStack(SqStack* S);//若栈为空栈返回TRUE
Status StackEmpty(SqStack S);//返回栈的长度
int StackLength(SqStack S);//返回栈顶元素
Status GetTop(SqStack S, SElemType* e);//入栈
Status Push(SqStack* S, SElemType e);//出栈
Status Pop(SqStack* S, SElemType* e);//遍历栈
Status StackTraverse(SqStack S, Status(*visit)());

栈操作

Status InitStack(SqStack* S)
{S->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));if (!S->base) exit(OVERFLOW);//存储分配失败S->top = S->base;S->stacksize = STACK_INIT_SIZE;return OK;
}Status GetTop(SqStack S, SElemType* e)
{if (S.top == S.base) return ERROR;*e = *(S.top - 1);return OK;
}Status Push(SqStack* S, SElemType e)
{if (S->top - S->base >= S->stacksize)//栈满,追加存储空间{S->base = (SElemType*)realloc(S->base, (S->stacksize + STACKINCREAMENT) * sizeof(SElemType));if (!S->base) exit(OVERFLOW);S->top = S->base + S->stacksize;S->stacksize += STACKINCREAMENT;}//入栈操作,完成操作后,top指针加1*S->top++ = e;return OK;
}Status Pop(SqStack* S, SElemType* e)
{if (S->base == S->top) return ERROR;*e = *--S->top;return OK;
}Status StackEmpty(SqStack S)
{if (S.base == S.top){return TRUE;}else{return FALSE;}
}Status ClearStack(SqStack* S)
{S->top = S->base;return OK;
}Status DestroyStack(SqStack* S)
{S->base = NULL;return OK;
}

功能实现

void look()
{char name[10];SElemType* p;printf("请输入学生姓名:");scanf("%s", name);p = stack.top;for (--p; p >= stack.base; p--){if (strcmp(p->name, name) == 0){printf("%s的成绩为%4.2f\n", p->name, p->score);printf("请按任意键返回!");_getch();return;}}printf("没有查询到该学生! 请按任意键返回!");_getch();
}void add()
{printf("请输入学生姓名:");scanf("%s", data.name);printf("请输入学生成绩:");scanf("%f", &data.score);Push(&stack, data);printf("添加学生成功!请按任意键返回");_getch();
}void dele()
{Pop(&stack, &data);printf("成功删除刚刚添加的学生!:%s\n按任意键返回!", data.name);_getch();
}void show()
{SElemType* p;p = stack.top;if (!p)printf("栈为空");for (--p; p >= stack.base; p--){printf("%s的成绩为%4.2f\n", p->name, p->score);}printf("请按任意键返回!");_getch();return;
}int StackLength(SqStack S) {return S.top - S.base;
}Status visit(SElemType e) {printf("%s, 分数: %.2f ", e.name, e.score);return OK;
}Status StackTraverse(SqStack S, Status(*visit)(SElemType)) {SElemType* p = S.base; // 从栈底开始遍历for (p = S.base; p != S.top; p++) {visit(*p);}printf("\n");return OK;
}void PrintStack(SqStack* S) {if (StackEmpty(*S)) { // 检查栈是否为空printf("Stack is empty.\n");return;}SElemType e;// 首先获取栈的长度int stackLength = StackLength(*S);// 然后从栈顶索引开始,向前遍历for (int i = stackLength - 1; i >= 0; i--) {e = (*S).base[i]; // 访问栈中的元素printf("姓名:%s  分数: %4.2f\n", e.name, e.score);}printf("\n");
}// 选择排序栈的函数
void SelectionSortStack(SqStack* S) {int i, j, maxIndex;SElemType temp, currentTop;// 打印初始栈状态printf("原始栈: \n");PrintStack(S);printf("按任意键继续:\n");_getch();for (i = 0; i <= StackLength(*S) - 1; i++) { // 注意这里的循环条件maxIndex = i;for (j = i + 1; j <= StackLength(*S) - 1; j++) { // 同上if ((S)->base[j].score > (S)->base[maxIndex].score) {maxIndex = j;}}if (i != maxIndex) {temp = (S)->base[i];(S)->base[i] = (S)->base[maxIndex];(S)->base[maxIndex] = temp;// 打印交换过程Status status = GetTop(*S, &currentTop);printf("交换了索引为 %d 与索引为 %d 的元素,当前栈顶分数为:%.2f\n", i, maxIndex, currentTop.score);}else {printf("获取栈顶元素失败。\n");}}// 打印排序后的栈状态printf("排序后的栈: \n");PrintStack(S);printf("按任意键继续:\n");_getch();
}

相关文章:

04学生管理系统(栈)

文章目录 预处理菜单结构体主函数函数声明栈操作功能实现 预处理 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<conio.h>#define OVERFLOW -2 #define FALSE 0 #define TRUE 1 #define OK 1 …...

我们如何在centos上部署批量管理工具ansible

1&#xff09;我们先准备环境、设备 #我们准备一台服务机 &#xff08;192.168.61.140&#xff09; ​#然后准备几天客户机&#xff08;192.168.61.141 192.168.61.142&#xff09;这里我们准备两台2)然后我们在客服务机里面添加域名 vi /etc/hosts ​ #添加如下内容 192.…...

如何评估前端代码审查培训计划的有效性?

评估前端代码审查培训计划的有效性可以通过以下方法&#xff1a; 培训前后测试&#xff1a; 在培训前后对学员进行测试&#xff0c;比较结果以评估知识增长。 学员反馈&#xff1a; 通过问卷调查、访谈或开放式反馈收集学员对培训内容、方式和效果的看法。 参与度&#xff1a…...

使用nvm切换Node.js版本

一、安装nvm nvm&#xff08;Node Version Manager&#xff09;是一个用于管理Node.js版本的工具&#xff0c;它允许你在同一台机器上安装和切换多个Node.js版本。 1.安装nvm https://github.com/coreybutler/nvm-windows 访问以上链接到github去下载 点击releases 下载下图…...

x264 编码器 PSNR算法源码分析

PSNR PSNR(Peak Signal-to-Noise Ratio,峰值信噪比)是一种常用的图像质量评价指标,用于衡量图像或视频的清晰度和质量。PSNR是基于信号的最大可能功率与影响信号的噪声功率之间的比率。在图像处理领域,PSNR通常用来评估图像压缩或图像增强算法的效果。 PSNR的计算公式是…...

开源web版3D展示工具Online3DViewer

Online3DViewer是一个免费且开源的Web解决方案&#xff0c;它允许用户在浏览器中直接预览和探索3D模型。 以下是关于Online3DViewer的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Online3DViewer是一个在线3D模型查看器&#xff0c;支持多种3D文件格式&#xff0c;用…...

白骑士的Matlab教学实战项目篇 4.2 信号与图像处理项目

系列目录 上一篇&#xff1a;白骑士的Matlab教学实战项目篇 4.1 数据分析与可视化 信号处理和图像处理是 MATLAB 的重要应用领域&#xff0c;广泛应用于医学、工程、科学研究等领域。以下内容将介绍信号滤波与频域分析、图像增强与分割的基本概念和方法&#xff0c;并通过一个…...

复现、并改进open-mmlab的mmpose详细细节

复现open-mmlab的mmpose详细细节 1.配置环境2.数据处理3.训练4.改进mmpose4.1 快速调试技巧4.2 快速定位4.3 改进backbone4.3.1 使用说明4.3.2 改进案例4.3.2.1 复现mmpose原配置文件4.3.2.2 复现开源项目4.3.2.3 修改配置文件4.3.2.4 修改新模型 4.4 添加auxiliary_head4.4.1 …...

编写兼容Python2.x与3.x代码

编写兼容Python2.x与3.x代码 当我们正处于Python2.x到Python3.x的过渡期时&#xff0c;你可能想过是否可以在不修改任何代码的前提下能同时运行在Python2和3中。这看起来还真是一个合理的诉求&#xff0c;但如何开始呢&#xff1f;哪些Python2代码在3.x解释器执行时容易出状况…...

比特币8.12学习问题

疑问&#xff1a;什么是过滤&#xff0c;什么是offset 没有投钱的情况下&#xff0c;怎么用api 公式&#xff1a;单币分配金额 总资金 / 2/ offset/选币数量&#xff0c;其中2 表示多空 买入滑点&#xff08;Slippage&#xff09;是指在执行交易订单时&#xff0c;实际成交…...

解析 Vue 中的app.version、 app.provide 与 app.runWithContext :原理、应用与实例剖析

目录 app.provide app.runWithContext ​​​​​​​app.version 非 VIP 用户能够通过积分下载博文资源 app.provide 在 Vue 3.0 中,app.provide充当着在应用层级提供全局共享数据或者服务的关键角色。 app.provide(key, value) 这一方法接收两个关键参数,其中 …...

Ubuntu server 命令行跑selenium

背景 自动化测试都是在本机win上使用selenium 跑自动化脚本,但是服务器都是命令行的没有web界面 依赖包部署 apt-get install zlib1g-dev zlib1g## 安装谷歌浏览器 ## 跳到底部,选择其他平台 https://www.google.com/chrome/## ubuntu # dpkg -i google-chrome-stable_…...

刚刚,模糊测试平台SFuzz受到行业认可

近日&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;正式发布了“2024年网络安全优秀创新成果大赛-安全严选专题赛”评选结果&#xff0c;开源网安模糊测试平台SFuzz凭借重大创新能力&#xff0c;得到组委会认可&#xff0c;获本次大赛创新产品优胜奖。 2024年网…...

数据结构与算法——DFS(深度优先搜索)

算法介绍&#xff1a; 深度优先搜索&#xff08;Depth-First Search&#xff0c;简称DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法会尽可能深地搜索图的分支&#xff0c;直到找到目标节点或达到叶节点&#xff08;没有子节点的节点&#xff09;&#xff0c;然后…...

基于lambda简化设计模式

写在文章开头 本文将演示基于函数式编程的理念&#xff0c;优化设计模式中繁琐的模板化编码开发&#xff0c;以保证用尽可能少的代码做尽可能多的事&#xff0c;希望对你有帮助。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff…...

揭秘! 经纬恒润“车路云一体化”方案研发服务背后的科技驱动力

随着高级别智能驾驶技术的飞速发展&#xff0c;自动驾驶与路侧基础设施协同合作已成为行业内的又一热点。我国率先提出以“车路云一体化”为核心的战略布局&#xff0c;国家政策密集出台&#xff0c;地方试点积极推进&#xff0c;行业标准日趋完善&#xff0c;智能网联汽车“车…...

Redis操作--RedisTemplate(二)StringRedisTemplate

一、介绍 1、简介 由于存储在 Redis 中的 key 和 value 通常是很常见的 String 类型&#xff0c;Redis模块提供了 RedisConnection 和 RedisTemplate 的扩展&#xff0c;分是 StringRedisConnection 和 StringRedisTemplate&#xff0c;作为字符串操作的解决方案。 通过源码…...

【自动驾驶】ROS中自定义格式的服务通信,含命令行动态传参(c++)

目录 通信流程创建服务器端及客户端新建服务通讯文件修改service的xml及cmakelistCMakeLists.txt编辑 msg 相关配置编译消息相关头文件在cmakelist中包含头文件的路径在service包下编写service.cpp在client包下编写client.cpp测试运行查询服务的相关指令列出目前的所有服务&…...

优思学院|PDCA和DMAIC之间如何选择?

在现代组织中&#xff0c;提升方法、质量和效率是企业追求卓越、保持竞争力的核心目标。在这条道路上&#xff0c;DMAIC&#xff08;定义、测量、分析、改进、控制&#xff09;和PDCA&#xff08;计划、执行、检查、行动&#xff09;被广泛应用于持续改进和问题解决。这两者虽然…...

5 款最佳 Micro SD 卡恢复软件,助您恢复文件

您是否对数据恢复存在某些疑问&#xff0c;并想知道如何恢复 Micro SD 卡上的文件&#xff1f;如果是&#xff0c;那么在本文中您将找到答案。网上有许多专门用于从 Micro SD 卡或格式化的 Micro 卡恢复已删除文件而设计的软件。因此&#xff0c;在本文中&#xff0c;我们将向您…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...