数据结构之分文件编译学生管理
list.h
#ifndef LIST_H_
#define LIST_H_
#define MAX 30
typedef struct
{int id;//学号char name[20];//姓名char major[20];//专业int age;//年龄
}student,*Pstudent;typedef struct
{student data[MAX];//储存学生信息的数组int len;//统计学生个数
}list,*Plist;Plist create_list();
student input();int input_list(Plist);int output_list(Plist);
int full(Plist);
int insert_stu(Plist,int,student);
int delete_stu(Plist,int);
int inserach_stu(Plist,int);
int change_stu(Plist,int,student);
int head(Plist,student);
int insert_real(Plist,student);
int delete_rev(Plist);
int find_student(Plist,char*);#endif
list.c
#include<myhead.h>
#include"list.h"
Plist create_list()
{Plist L = malloc(sizeof(list));if(NULL==L){printf("申请空间失败\n ");return NULL;}L->len= 0;printf("创建成功\n");return L;
}
int input_list(Plist L)
{int n;printf("请输入学生个数:\n");scanf("%d",&n);for(int i=0;i<n;i++){printf("请输入第%d个学生信息:\n",i+1);printf("请输入学号:");scanf("%d",&L->data[i].id);printf("请输入姓名:");scanf("%s",L->data[i].name);printf("请输入专业:");scanf("%s",L->data[i].major);printf("请输入年龄:");scanf("%d",&L->data[i].age);L->len++;//计数器}return 0;
}
int output_list(Plist L)
{int i;for(i = 0;i<L->len;i++){printf("学号:%d\t姓名:%s\t专业:%s\t年龄:%d\n",\L->data[i].id,L->data[i].name,L->data[i].major,L->data[i].age);}return 0;
}
int full(Plist L)
{if(L->len==MAX){return 1;}return 0;
}int insert_stu(Plist L,int pos,student e)
{int sub = pos-1;if(sub<0||sub>L->len||L==NULL||full(L)){printf("插入失败!\n");return -1;}int i;for(i=L->len ; i>=sub ; i--){L->data[i+1]=L->data[i];}L->data[sub] = e;L->len++;printf("插入成功!\n");return 0;}
int delete_stu(Plist L,int pos)
{int i,sub=pos-1;if(sub<0||sub>L->len||L==NULL||L->len==0){printf("删除失败\n");return -1;}for(i=sub;i<=L->len-1;i++){L->data[i]=L->data[i+1];}L->len--;printf("删除成功!\n");return 0;
}
int inserach_stu(Plist L,int pos)
{int i,sub=pos-1;if(sub<0||sub>L->len||L==NULL||L->len==0){printf("查找失败\n");return -1;}printf("学生存在\n");printf("学号:%d\t姓名:%s\t专业:%s\t年龄:%d\n",\L->data[sub].id,L->data[sub].name,L->data[sub].major,L->data[sub].age);return 0;
}int change_stu(Plist L,int pos,student e1)
{int sub = pos-1;if(sub<0||sub>L->len||L==NULL||L->len==0){printf("修改失败\n");return -1;}L->data[sub] = e1;printf("修改成功\n");return 0;}
int head(Plist L,student e2){if(L==NULL||full(L)){printf("插入表头失败!\n");return -1;}int i;for(i=L->len-1;i>=0;i--){L->data[i+1]=L->data[i];}L->data[0]=e2;L->len++;printf("表头插入成功!\n");return 0;
}int insert_real(Plist L,student e2){if(L==NULL||full(L)){printf("插入失败!");return -1;}L->data[L->len]=e2;L->len++;printf("表尾插入!\n");return 0;}int delete_rev(Plist L)
{int i,j;for(i=0;i<L->len;i++){for(j=i+1;j<L->len;j++){if(strcmp(L->data[i].name,L->data[j].name)==0){delete_stu(L,j+1);j--;}}}}
student input(){student e;printf("请输入学号:");scanf("%d",&e.id);printf("请输入姓名:");scanf("%s",e.name);printf("请输入专业:");scanf("%s",e.major);printf("请输入年龄:");scanf("%d",&e.age);return e;
}int find_student(Plist L,char key[20]){int i,sub=-1;for(i=0;i<L->len;i++){if(strcmp(key,L->data[i].name)==0){printf("位置%d\t是%s\n",i+1,L->data[i].name);sub=1;}}if(sub==-1){printf("查找失败\n");return -1;}return 0;
}
mymain.c
#include <myhead.h>
#include "list.h"
int main(int argc, const char *argv[])
{Plist L = create_list();//创建顺序表返回顺序表地址 input_list(L);while(1){printf("\t\t\t请输入执行的功能\n");printf("\t\t\t1.插入一个学生\n");printf("\t\t\t2.删除一个学生\n");printf("\t\t\t3.查找一个学生\n");printf("\t\t\t4.修改一个学生\n");printf("\t\t\t5.表头插入\n");printf("\t\t\t6.表尾插入\n");printf("\t\t\t7.去重\n");printf("\t\t\t8.根据姓名查找\n");printf("\t\t\t9.退出\n");int n;scanf("%d",&n);switch(n){case 1:{int x=0;student E =input();printf("请输入插入位置:");scanf("%d",&x);insert_stu(L,x,E);output_list(L);break;}case 2:{ int x=0;printf("请输入删除位置:");scanf("%d",&x);delete_stu(L,x);output_list(L);break;}case 3:{ int x=0;printf("查找一个学生:");scanf("%d",&x);inserach_stu(L,x);break;}case 4:{ int x=0;student E = input();printf("请输入修改的位置:");scanf("%d",&x);change_stu(L,x,E);output_list(L);break;}case 5:{printf("请输入表头插入的内容:\n");student e=input();head(L,e);output_list(L);break;}case 6:{ printf("请输入表尾插入的内容:\n");student e=input();insert_real(L,e);output_list(L);break;}case 7:{ printf("进行去重操作\n");delete_rev(L);output_list(L);break;}case 8:{ char key[20];printf("请输入查找学生的姓名\n");scanf("%s",key);find_student(L,key);break;}case 9:{ return 0;break;}}}return 0;
}
展示效果:
运行,进行功能测试:
相关文章:

数据结构之分文件编译学生管理
list.h #ifndef LIST_H_ #define LIST_H_ #define MAX 30 typedef struct {int id;//学号char name[20];//姓名char major[20];//专业int age;//年龄 }student,*Pstudent;typedef struct {student data[MAX];//储存学生信息的数组int len;//统计学生个数 }list,*Plist;Plist c…...

TypeScript入门 (二)控制语句
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文主要讲解TypeScript中控制语句的部分;希望通过我的知识点总结,能够帮助你更好地…...

MVP 最简可行产品
MVP(最小可行产品)是一种产品开发策略,其主要目的是用最少的时间和资源,开发一个包含最基本必要功能的产品。这样做的目的是能够以最小的成本进入市场,获取用户反馈,再根据反馈逐步优化产品。 MVP是什么 …...

数仓工具:datax
datax可以理解为sqoop的优化版, 速度比sqoop快 因为sqoop底层是map任务,而datax底层是基于内存 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定…...

CSS传统布局方法(补充)——WEB开发系列37
开发技术不断演进,布局方式也经历了多个阶段的变革。从最初的基于表格布局到 CSS 的浮动布局,再到今天的弹性盒(Flexbox)与 CSS Grid 网格布局,每一种布局方式都有其独特的背景和解决特定问题的优势。 一、CSS Grid 出…...
【系统架构设计师】软件架构的风格(经典习题)
更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2题】【第3~4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15~16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24~…...
网页打开时,下载的文件fetcht类型?有什么作用?
fetch API是一种用于向服务器发送请求并获取响应的现代Web API。它支持获取各种类型的数据,包括文本、JSON、图像和文件等。fetch API的主要优势之一是支持流式传输和取消请求,这使得处理大型数据集和长时间运行的操作变得更加简单和可靠。此外&…...

作为HR,如何考察候选人的专业知识与技能
这是严肃的话题,如何考察候选人的专业知识和技能。HR招聘是一个让我们既爱又恨的过程。爱的是,我们有机会遇到各种各样的人才;恨的是,要从茫茫人海中找到那个“对的人”简直比找一根针在干草堆里还难。 本系列的文章,…...

阻止冒泡事件
每一div都有一个切换事件 div里包括【复制】事件, 点击【复制按钮】,会触发【切换事件】 因为冒泡 在 Vue 3 中,阻止 click 事件冒泡可以使用以下常规方法: 1 事件修饰符:Vue 3 中提供了多种事件修饰符,…...

聊聊Netty对于内存方面的优化
写在文章开头 Netty通过巧妙的内存使用技巧尽可能节约内存空间,进而减少java中Full gc的STW的时间,由此间接的提升了程序的性能,本文也将直接从源码的角度分析一下Netty对于内存方面的使用技巧,希望对你有所启发。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java…...

2024年轻人驯化AI指南
或许Python编程是答案 我为您精心准备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步! &…...

算法:双指针题目练习
文章目录 算法:双指针移动零复写零快乐数盛最多水的容器有效三角形的个数查找总价格为目标值的两个商品三数之和四数之和 总结 算法:双指针 移动零 定义两个指针,slow和fast.用这两个指针把整个数组分成三块. [0,slow]为非零元素,[slow1,fast-1]为0元素,[fast,num.length]为未…...

傅里叶变换的基本性质和有关定理
一、傅里叶变换的基本性质 1.1 线性性质 若 则 其中:a,b是常数 函数线性组合的傅里叶变换等于歌函数傅里叶变换的相应组合。 1.2 对称性 若 则 关于傅里叶变换的对称性还有 虚、实、奇、偶函数的傅里叶变换性质: 1.3 迭次傅里叶变换 对f(x,y)连续两次做二维傅里叶变换…...
VIM使用技巧
VIM使用技巧;VIM常用快捷键;vim常用命令;VIM常用快捷命令;vim使用技巧 VIM使用技巧 移动光标 hjkl,h光标向前移动一个字符的位置;j光标向下移动一行;k光标向上移动一行;l光标向后移动一个字符…...

C语言进阶【4】---数据在内存中的存储【1】(你不想知道数据是怎样存储的吗?)
本章概述 整数在内存中的存储大小端字节序和字节序判断练习1练习2练习3练习4练习5练习6 彩蛋时刻!!! 整数在内存中的存储 回忆知识:在讲操作符的那章节中,对于整数而言咱们讲过原码,反码和补码。整数分为有…...
【mysql面试题】mysql复习之常见面试题(一)
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。以下是在VB.NET中…...
vue2+js项目升级vue3项目流程
Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有了显著的提升。升级到 Vue 3 可以让你的项目受益于这些改进。但是,升级过程也需要谨慎,因为涉及到代码的重构和潜在的兼容性问题。 1. 升级前的准备 备份项目: 在开始升级之前,…...
做EDM邮件群发营销时如何跟进外贸客户?
跟进外贸客户是外贸业务中至关重要的一环,需要耐心和策略。以下是一些建议,帮助你有效跟进外贸客户: 充分了解产品: 深入了解自己的产品,包括品质、价格竞争力、适用市场等。 只有对产品有充分的了解,才…...

【Java经典游戏】-01-是男人就坚持30秒
hello!各位彦祖们!我们又见面了!! 今天兄弟我给大家带来了一款经典趣味小游戏的项目案例-是男人就坚持30秒 本项目案例涉及到的技术: Java 语法基础Java 面向对象JavaSwing 编程Java 线程 是一个非常适合小白来加强…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...