数据结构之分文件编译学生管理
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 线程 是一个非常适合小白来加强…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
