数据结构day4

2023-11-03

https://note.youdao.com/s/SwyFfOgRicon-default.png?t=N6B9https://note.youdao.com/s/SwyFfOgR

学生管理系统

头文件

#ifndef _STULIST_H_
#define _STULIST_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 40
typedef struct STU{
	char name[20];
	char sex[10];
	int score; 
}datatype;
typedef struct {
	datatype data[MAX];
	int len;
}stuList,*stuListPtr;
//创建顺序表
stuListPtr list_create();

//判满
int list_full(stuListPtr S);

//判空
int list_empty(stuListPtr S);

//向顺序表中添加元素
int list_add(stuListPtr S);

//遍历顺序表 
void list_show(stuListPtr S);

//任意位置插入元素
int list_insert_pos(stuListPtr S);

//任意位置删除元素
int list_delete_pos(stuListPtr S);

//按位置进行修改
int list_update_pos(stuListPtr S);

//按值进行修改
int list_update_value(stuListPtr S);

//查找指定位置的元素
datatype *list_search_pos(stuListPtr S);

//按值进行查找元素,返回查到的位置
int list_search_value(stuListPtr S);

//清空顺序表
void list_free(stuListPtr S);

//功能菜单
void menu();

#endif

函数功能具体实现

#include"stulist.h" 

//创建班级顺序表****************************************
stuListPtr list_create(){
	stuListPtr S=(stuListPtr)malloc(sizeof(stuList));
	if(NULL==S){
		printf("申请失败\n");
		return NULL;
	}
	memset(S->data, 0, sizeof(S->data));   //清空数组
	S->len = 0;                  //数组长度清零
	printf("申请成功\n");
	return S;
}



//判满***********************************************
int list_full(stuListPtr S){
	if(NULL==S){
		printf("不合法\n");
		return 0;
	}
	return	S->len==MAX;
}




//判空***************************************************
int list_empty(stuListPtr S){
	if(NULL==S){
		printf("不合法\n");
		return 0;
	}
	return S->len==0;
}




//向班级中添加成员*****************************************
int list_add(stuListPtr S){
	if(NULL==S||list_full(S)){
		printf("不合法\n");
		return 0;
	}
	for(S->len=0;S->len<MAX;S->len++){
		int value=0;
		printf("是否添加学生信息?(1/0)\n");
		scanf("%d",&value);
		if(value==1){
			puts("请按以下格式输入学生信息");
			printf("第%d个学生:\n",S->len+1);
			printf("姓名:");
			scanf("%s",S->data[S->len].name);
			printf("性别:");
			scanf("%s",S->data[S->len].sex);
			printf("成绩:");
			scanf("%d",&S->data[S->len].score);
			printf("添加成功\n");
		}	
		else if(value==0){
			printf("添加结束\n");
			return 0;
		}
	}
}




//遍历顺序表**********************************
void list_show(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("不合法\n");
		return;
	}
	for(int i=0;i<S->len;i++){
		printf("第个%d学生的信息为:\n",i+1);
		printf("姓名:%s\n",S->data[i].name);
		printf("性别:%s\n",S->data[i].sex);
		printf("成绩:%d\n",S->data[i].score);
	}
}




//任意位置插入元素***************************************
int list_insert_pos(stuListPtr S){
	if(NULL==S||list_full(S)){
		printf("不合法\n");
		return 0;
	}
	int k,j;
	printf("请问要不要添加学生信息?(1/0)\n");
	scanf("%d",&j);
	if(j==1){
		printf("请问需要在哪插入学生信息?\n");
		scanf("%d",&k);
		if(k>S->len||k<1||j==0){
			printf("插不了一点\n");
			return 0;
		}
		for(int i=S->len-1;i>k-1;i--){
			S->data[S->len]=S->data[S->len-1];
			printf("请输入需要插入学员信息\n");
			printf("姓名:");
			scanf("%s",S->data[k-1].name);
			printf("性别:");
			scanf("%s",S->data[k-1].sex);
			printf("成绩:");
			scanf("%d",&S->data[k-1].score);
			S->len++;
			return 1;
		}
	}
}





//任意位置删除元素*******************************
int list_delete_pos(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表删毛!\n");
		return 0;
	}
	int i=0;
	printf("请问想删第几个学生的信息?\n");
	scanf("%d",&i);
	if(i<1||i>S->len){
		printf("删毛\n");
		return 0;
	}
	for(int j=i;j<S->len;j++){
		S->data[j-1]=S->data[j];
	}
	printf("删除成功\n");
	S->len--;
	return 1;
}



//按位置进行修改********************************
int list_update_pos(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表改毛!\n");
		return 0;
	}
	int pos=0;
	printf("请问想修改哪个学生的信息?\n");
	scanf("%d",&pos);
	if(pos<1||pos>S->len){
		printf("改毛\n");
		return 0;
	}
	printf("请输入需要修改学员的信息\n");
	printf("姓名:");
	scanf("%s",S->data[pos-1].name);
	printf("性别:");
	scanf("%s",S->data[pos-1].sex);
	printf("成绩:");
	scanf("%d",&S->data[pos-1].score);
	printf("修改成功\n");
	return 1;
}




//按值进行修改***********************************
int list_update_value(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表改毛!\n");
		return 0;
	}
	char n[32];
	int pos=0;
	printf("请问要修改哪个学生的信息?\n");
	scanf("%s",n);
	for(int i=0;i<S->len;i++){
		if(strcmp(S->data[i].name,n)!=0){
			printf("查无此人\n");
			return 0;
		}
		if(strcmp(S->data[i].name,n)==0){
			pos=i+1;
			printf("请输入需要修改学员的信息\n");
			printf("姓名:");
			scanf("%s",S->data[pos-1].name);
			printf("性别:");
			scanf("%s",S->data[pos-1].sex);
			printf("成绩:");
			scanf("%d",&S->data[pos-1].score);
			printf("修改成功\n");
			return 1;
		}
	}
}



//查找指定位置的元素*******************************
datatype *list_search_pos(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表查毛!\n");
		return NULL;
	}
	int pos=0;
	printf("请输入需要查找学生编号\n");
	scanf("%d",&pos);
	if(pos<1||pos>S->len){
		printf("查毛\n");
		return NULL;
	}
	printf("该学生信息为:\n");
	printf("姓名\t性别\t成绩\n%s\t%s\t%d\n",S->data[pos-1].name,S->data[pos-1].sex,S->data[pos-1].score);
	printf("查找完成!\n");
	return &S->data[pos-1];
}



//按值进行查找元素,返回查到的位置********************
int list_search_value(stuListPtr S){
	if(NULL==S||list_empty(S)){
		printf("空表查毛!\n");
		return 0;
	}	
	int pos=0;
	char n[32];
	printf("请输入需要查找学生姓名\n");
	scanf("%s",n);
	for(int i=0;i<S->len;i++){
		if(strcmp(S->data[i].name,n)!=0){
			printf("查无此人\n");
			return 0;
		}
		if(strcmp(S->data[i].name,n)==0){
			pos=i+1;
			printf("该学生是%d号学生\n",pos);
			printf("查找成功!\n");
			return pos;
		}
	}
}



//清空顺序表********************************
void list_free(stuListPtr S){
	if(NULL != S)
	{
		free(S);
		S = NULL;      //值传递
	}

	printf("释放表成功\n");

}



void menu()
{
	puts("******************************************");
	puts("+++++++++++欢迎来到学生管理系统+++++++++++");
	puts("******************************************");
	puts("+++++******  1.添加学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  2.姓名查找学生  ******+++++++");
	puts("******************************************");
	puts("+++++******  3.显示学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  4.删除学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  5.按号码查找学生  ******+++++++");
	puts("******************************************");
	puts("+++++******  6.按姓名修改学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  7.清空学生信息  ******+++++++");
	puts("******************************************");
	puts("+++++******  0.退出学生系统  ******+++++++");
	puts("******************************************");
	puts("+++++  请输入对应序号执行对应的操作  +++++");
	puts("******************************************");
}

主函数

#include"stulist.h"
int main(int argc, const char *argv[])
{
	stuListPtr S=list_create();
	if(S==0){
		printf("申请失败\n");
		return -1;
	}
	int a=0;
	while(1)
	{
		menu();
		scanf("%d",&a);
		switch(a)
		{
		case 1 :  
			list_add(S);  
			break;//输入信息
		case 2 :
			list_search_value(S);
			break;//根据name查找信息
		case 3 :
			list_show(S);
			break;//显示所有学生信息
		case 4 :
			list_delete_pos(S);				
			break;//删除学生
		case 5 :
			list_search_pos(S);
			break;//按号码查找学生
		case 6 :
			list_update_value(S);
			break;//按姓名修改信息
		case 7 :
			list_free(S);
			break;//清空学生信息
		case 0 :return 0;
		default:break;
		}
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构day4 的相关文章

  • 初识哈夫曼编码

    1 什么是哈夫曼编码 1 什么是编码 编码就是把一些信息比如文字文件 视频文件转成0101的一堆数字存储起来 这些数字就是编码 它们需要满足数字与字符的一一对应关系 当然还必须满足可以由这一堆数字转回到文件信息 这样的编码才是有意义的 2
  • 算法与数据结构(二十五)TopK问题:基于快排的Python模板

    首先 先写partition模板 def partition nums left right pivot nums left 初始化一个待比较数据 i j left right while i lt j while i
  • 分治-归并排序

    文章目录 315 计算右侧小于当前元素的个数 1 题目 2 算法原理 3 代码实现 493 翻转对
  • 算法题-简单系列-05-两个链表的第一个公共结点

    文章目录 1 题目 1 1 思路1 循环遍历 1 题目 输入两个无环的单向链表 找出它们的第一个公共结点 如果没有公共节点则返回空 1 1 思路1 循环遍历 使用两个指针N1 N2 一个从链表1的头节点开始遍历 我们记为N1 一个从链表2的
  • 算法设计与实现--贪心篇

    贪心算法 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法 以期望能够通过一系列局部最优的选择达到全局最优 贪心算法的关键是定义好局部最优的选择 并且不回退 即一旦做出了选择 就不能撤销 一般来说 贪心算法适用于满足以下两个条件的
  • E (1052) : DS树--带权路径和

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 计算一棵二叉树的带权路径总和 即求赫夫曼树的带权路径和 已知一棵二叉树的叶子权值 该二叉树的带权路径和APL等于叶子权值乘以根节点到叶子的分支数 然后求
  • 数组实现循环队列(增设队列大小size)

    目录 一 前言 1 如何实现循环 2 如何判断队列为空 3 如何判断队列为满 二 循环队列的结构定义 三 循环队列的创建及其初始化 四 入队 五 出队 六 取队头元素 七 取队尾元素 八 循环队列判空 九 循环队列判满 十 循环队列销毁 一
  • 【数据结构入门精讲 | 第二篇】一文讲清算法复杂度

    上篇文章中我们引入了算法 数据结构 数据类型等概念 而要想衡量一个算法与数据结构是否为优质的 就需要一个衡量标准 这个衡量标准也是在我们实现一个好的算法时要遵循的原则 目录 基本概念 渐进性态 渐进性态数学表征 算法复杂度的运算 顺序搜索算
  • 【C++】手撕string思路梳理

    目录 基本思路 代码实现 1 构建框架 2 构建函数重载 3 迭代器 4 遍历string 5 resetve 开空间 insert任意位置插入push back append 按顺序依次实现 6 erase删除 clear清除 resiz
  • DS八大排序之冒泡排序和快速排序

    前言 前两期我们已经对 插入排序 直接插入排序和希尔排序 和 选择排序 直接选择排序和堆排序 进行了详细的介绍 这一期我们再来详细介绍一组排序 交换排序 即耳熟能详的冒泡排序和赫赫有名的快速排序 本期内容介绍 冒泡排序 快速排序 Hoare
  • 回溯算法第零篇【递归、搜索与回溯】【回溯算法入门必看】

    本篇文章的目的 1 给小伙伴们对回溯算法中的名词进行解释 2 消除递归的恐惧 回溯是递归的一个分支 给小伙伴们一个建议 整篇文章都要看完 一字不漏 全是干货 注意 分析回溯的思想之前 我们得知道一个关系 递归包含搜索 搜索包含回溯 所以我们
  • 【数据结构和算法】 K 和数对的最大数目

    其他系列文章导航 Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一 题目描述 二 题解 2 1 方法一 双指针排序 三 代码 3 1 方法一 双指针排序 3
  • 数据结构算法-快速排序

    核心思路 快速排序算法核心思路 选择一个 基准 元素 将数组分为两个子数组 一个包含比基准小的元素 另一个包含比基准大的元素 然后对这两个子数组进行递归排序 基准数 初始化两个索引 i 和 j 分别子数组的开头和结尾 初始化基准元素 bas
  • LeetCode 2397. 被列覆盖的最多行数,状态压缩优化回溯法

    一 题目 1 题目描述 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆盖 则认为这
  • LeetCode 2397. 被列覆盖的最多行数,状态压缩优化回溯法

    一 题目 1 题目描述 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆盖 则认为这
  • 【每日一题】2397. 被列覆盖的最多行数-2024.1.4

    题目 2397 被列覆盖的最多行数 给你一个下标从 0 开始 大小为 m x n 的二进制矩阵 matrix 另给你一个整数 numSelect 表示你必须从 matrix 中选择的 不同 列的数量 如果一行中所有的 1 都被你选中的列所覆
  • 浅谈归并排序:合并 K 个升序链表的归并解法

    在面试中遇到了这道题 如何实现多个升序链表的合并 这是 LeetCode 上的一道原题 题目具体如下 用归并实现合并 K 个升序链表 LeetCode 23 合并K个升序链表 给你一个链表数组 每个链表都已经按升序排列 请你将所有链表合并到
  • 搜索二叉树(BSTree)

    一 搜索二叉树的概念 二叉搜索树又称为做二叉排序树 二叉查找树 其要么是一棵空树 要么是一个满足以下性质的二叉树 若它的左子树不空 则左子树上所有结点的关键字均小于根结点关键字 若它的右子树不空 则右子树上所有结点的关键字均大于根结点关键字
  • 排序:计数排序

    一 概念 计数排序是非比较排序 是对哈希直接定址法的变形应用 二 思想 利用数组统计相同数据出现的次数 例如整型数据m出现n次 就在数组m位置记录数据为n 最后从头遍历数组打印数据即可 通俗来讲就是 数组下标即为数据 下标所指位置的值即为数
  • 「优选算法刷题」:快乐数

    一 题目 编写一个算法来判断一个数 n 是不是快乐数 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是 无限循环 但始终变不到 1 如果这个过程 结果为 1 那么这个

随机推荐

  • 2021.11.3-11.4总结

    1 将C语言的单链表看完 简单了解了一下typedef的用法 2 继续数据结构的学习 将线性表的基础知识已学完 因为将C语言的结构体学习了 所以再次重看线性表的顺序表和单链表 比以前更容易理解 更加理解指针 懂了线性表的存储结构 顺序表 单
  • 为什么重写equals()方法时必须重写hashCode()方法【详解】

    目录 一 为什么重写equals 方法时必须重写hashCode 方法 1 关于hashCode 的约定 hashCode 方法源码注释 2 equals 方法和hashCode 方法的关系 3 为什么一定要使用 hashcode 方法 举
  • HTML小白入门学习1

    目录 一 什么是HTML 二 HTML的语法 2 1 基本结构 2 1 1 基本结构的解释 三 实体 3 1 什么是实体 3 2 实体的语法 四 常用的标签 4 1 常用标签 目录 一 什么是HTML 二 HTML的语法 2 1 基本结构
  • C# 调用可执行exe文件几种方法小结

    1 利用进程池方式启动 string exefile xxx exe if File Exists exefile Process process new Process params 为 string 类型的参数 多个参数以空格分隔 如果
  • snprintf和strcpy和strncpy的区别

    概述 snprintf strcpy strncpy这几个函数的功能都是将原字符串拷贝到目的字符串中 但是在细节部分还是存在着一些细微的差别 主要参考man说明 snprintf 格式 int snprintf char str size
  • 最长公共子序列 (LCS) 详解+例题模板(全)

    欢迎访问https blog csdn net lxt Lucia 宇宙第一小仙女 o 萌量爆表求带飞 o dalao们点个关注呗 我只是一条可爱哒分界线 1 摘要 继上篇最长上升子序列后 本篇主要讲述最长公共子序列 LCS 2 LCS定义
  • HMC管理IBM小机

    IBM P5小机的HMC1和HMC2的IP地址默认为192 168 2 147和192 168 3 147 如果对此默认IP做过改动 后来又遗忘的情况下 通过进入P5小机液晶控制面板上的功能30 就能读出HMC端口的IP地址 具体步骤如下
  • WSI图像分割

    0 介绍 Whole Slide Image WSI 图像非常的大 处理起来比较麻烦 在深度学习中的病理切片图像大多数在 10万x10万分辨率 用平常的图像处理库没有办法读取 openslide 提供了一个很好的接口 这里介绍一个可用于处理
  • void*强制类型转换的应用(自己看吧)

    int main int num 20 void value NULL value num printf d n int value return 0 int test void p return int p int main int nu
  • Java—面向对象设计—类和对象

    理解面向对象程序设计 面向对象程序 Object oriented programming OOP 设计是继面向过程又一具有里程碑意义的编程思想 是现实世界模型的自然延伸 下面从结构化程序设计说起 逐步展示面向对象程序设计 结构化程序设计简
  • 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 kevinxiaoyu 高级研究员 隶属腾讯TEG 架构平台部 主要研究方向为深度学习异构计算与硬件加速 FPGA云 高速视觉感知等方向的构架设计和优化 深度学习的异构加速技术
  • RabbitMQ之延迟队列

    RabbitMQ之延迟队列 1 延迟队列概念 2 延迟队列使用场景 3 RabbitMQ 中的 TTL 3 1 消息设置 TTL 3 2 队列设置 TTL 3 3 两者的区别 4 整合 SpringBoot 4 1 创建项目 4 2 添加依
  • 深入解析C/C++的优缺点以及就业方向

    众所周知C C Java Python都是主流的后端开发语言 并且不同的语言 具备不同的优缺点以及就业方向 解析来小编带你一起看看C C 的优缺点以及就业方向 深入解析C C 的优缺点以及就业方向 C语言是很多语言的鼻祖 所以学会C语言 非
  • Welcome to Level 3 (不容易啊...记下啦^_@)

    Welcome to Level 3 Hey clin003 Congratulations Don t forget to check your Mod X ranking and access the level 3 forum to
  • 结合入栈出栈浅谈前序遍历,中序遍历,后序遍历

    二叉树深度遍历 讨巧应付面试 以前其实也懂什么叫二叉树的前中后序遍历 反正面试的时候 给我一个二叉树 我是知道怎么写出他们的答案的 例如如下二叉树 前序遍历 A B D E C F G 中序遍历 D B E A F C G 后序遍历 D E
  • Infinite Fraction Path【HDU-6223】【BFS+剪枝】

    题目链接 训练赛的时候 想到的做法是倍增维护 因为每个点的后继是唯一的 然后又因为不会桶排 所以的复杂度是一定会TLE的 难受 听说桶排还是会被卡 大雾 然后下来补题的时候听了队友的意见 其实比赛的时候就应该多听听 也许就能想到这个bfs了
  • 某返利网站admin目录index.php文件混淆加密算法分析

    恢复内容开始 文件已经加密 可以在此下载 index php 文件内容打开大概如此 简单字符替换之后 发现字符串用base64 decode仍无法解码 找到一个解码网站 找源码 解码后的文件如下 下载地址 尾部仍然有大量未知编码内容 简单修
  • IP协议的服务类型(翻译RFC 1349)

    目录 1 简介 2 目标和理念 3 服务八位字节类型规范 4 TOS字段的规范 5 Internet协议中TOS字段的使用 5 1 Internet控制消息协议 ICMP 5 2传输协议 5 3应用协议 6 ICMP和TOS字段 6 1无法
  • 圆投影匹配算法描述及实现

    解决模板图和基准图之间存在任意角度旋转的景象匹配问题的关键是找到一个旋转不变量 圆投影匹配算法就是利用 圆 的各向同性和投影特征提出来的 传统的图像匹配算法 如归一化交叉互相关算法 主要利用像素点与像素点之间的相关性计算匹配图像与模板之间的
  • 数据结构day4

    https note youdao com s SwyFfOgRhttps note youdao com s SwyFfOgR 学生管理系统 头文件 ifndef STULIST H define STULIST H include