华清数据结构day3 24-7-18

基于昨天代码增加增删改查功能

zy.h

#ifndef ZY_H
#define ZY_H
#define MAX 100 //最大容量
//定义学生类型
struct Stu
{char name[20];int age;double score;
};
//定义班级类型
struct Class
{struct Stu student[MAX]; //存放学生的容器int size;                //实际人数
};
int *create(int size);
void input(struct Class *ptr, int size);     //录入函数
void sort(struct Class *ptr, int size);      //降序排序函数
void maxandmin(struct Class *ptr, int size); //输出最好和最差的学生
void output(struct Class *ptr, int size);    //输出学生
void destroy(struct Class *ptr);             //释放内存的函数int insert(struct Class *ptr, int size,int e); //增int delete (struct Class *ptr, int size, int e); //删int update(struct Class *ptr, int e); //改int search(struct Class *ptr, int size, int e); //查
int empty(struct Class *ptr );
int full(struct Class *ptr );
#endif

zy.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100 //最大容量
//定义学生类型
struct Stu
{char name[20];int age;double score;
};
//定义班级类型
struct Class
{struct Stu student[MAX]; //存放学生的容器int size;                //实际人数
};
int empty(struct Class *ptr)
{return ptr->size == 0;
}
int full(struct Class *ptr)
{return ptr->size == MAX;
}
int *create(int size)
{struct Class *ptr = (struct Class **)malloc(sizeof(struct Class *) * size);if (ptr == NULL){printf("申请失败\n");return NULL;}memset(ptr, 0, sizeof(int) * size);ptr->size = size;return ptr;
}
void input(struct Class *ptr, int size) //录入函数
{if (ptr == NULL){printf("申请失败\n");return;}for (int i = 0; i < ptr->size; i++){printf("请输入第%d个学生的姓名,年龄,成绩(空格分开):", i + 1);scanf("%s %d %lf", ptr->student[i].name, &ptr->student[i].age, &ptr->student[i].score);}
}
void sort(struct Class *ptr, int size) //降序排序函数
{if (ptr == NULL){printf("申请失败\n");return;}for (int i = 1; i < ptr->size; i++){for (int j = 0; j < ptr->size - i; j++){if (ptr->student[j].score < ptr->student[j + 1].score){struct Stu temp = ptr->student[j];ptr->student[j] = ptr->student[j + 1];ptr->student[j + 1] = temp;}}}
}
void maxandmin(struct Class *ptr, int size) //输出最好和最差的学生
{if (ptr == NULL){printf("申请失败\n");return;}int max = 0, min = 0;for (int i = 1; i < ptr->size; i++){if (ptr->student[max].score < ptr->student[i].score){max = i;}if (ptr->student[min].score > ptr->student[i].score){min = i;}}printf("最好的学生的姓名=%s,年龄=%d,成绩=%.2lf:\n", ptr->student[max].name, ptr->student[max].age, ptr->student[max].score);printf("最差的学生的姓名=%s,年龄=%d,成绩=%.2lf:\n", ptr->student[min].name, ptr->student[min].age, ptr->student[min].score);
}
void output(struct Class *ptr, int size) //输出学生
{if (ptr == NULL){printf("申请失败\n");return;}printf("输出学生信息:\n");for (int i = 0; i < ptr->size; i++){printf("第%d个学生的姓名=%s,年龄=%d,成绩=%.2lf:\n", i + 1, ptr->student[i].name, ptr->student[i].age, ptr->student[i].score);}
}
void destroy(struct Class *ptr) //释放内存的函数
{free(ptr);
}
int insert(struct Class *ptr, int size, int e)
{//判断逻辑if (NULL == ptr || full(ptr) || e < 0 || e > ptr->size){printf("插入失败\n");return -1;}//腾空逻辑for (int i = ptr->size - 1; i >= e; i--){ptr->student[i + 1] = ptr->student[i]; //将前面的元素后移}printf("请输入添加学生的姓名,年龄,成绩(空格分开):");scanf("%s %d %lf", ptr->student[e].name, &ptr->student[e].age, &ptr->student[e].score);ptr->size++;return 0;
}int delete (struct Class *ptr, int size, int e)
{if (NULL == ptr || empty(ptr) || e < 0 || e >= ptr->size){printf("删除失败\n");return -1;}printf("删除%d位学生\n", e + 1);for (int i = e; i < ptr->size - 1; i++){ptr->student[i] = ptr->student[i + 1];}ptr->size--;return 0;
}int update(struct Class *ptr, int e)
{if (NULL == ptr || e < 0 || e >= ptr->size || empty(ptr)){printf("修改失败\n");return -1;}printf("修改%d位学生\n", e + 1);printf("请输入修改学生的姓名,年龄,成绩(空格分开):");scanf("%s %d %lf", ptr->student[e].name, &ptr->student[e].age, &ptr->student[e].score);return 0;
}int search(struct Class *ptr, int size, int e)
{if (NULL == ptr || empty(ptr)){printf("查找失败\n");return -1;}printf("查找\n");int count = 0;for (int i = 0; i < ptr->size; i++){if (ptr->student[i].score == e){printf("找到该学生的姓名=%s,年龄=%d,成绩=%.2lf:\n", ptr->student[i].name, ptr->student[i].age, ptr->student[i].score);count++;}}if (count == 0){printf("没找到\n");}return 0;
}

zymain.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "zy.h"int main(int argc, char const *argv[])
{int size = 0;printf("请输入你要输入的人数:");scanf("%d", &size);struct Class *P = create(size);//调用录入函数input(P, size);//降序排序函数sort(P, size);//输出最好和最差的学生maxandmin(P, size);//输出学生output(P, size);//增insert(P, size, 1);//输出学生output(P, size);//删delete (P, size, 2);//输出学生output(P, size);//改update(P, 1);//输出学生output(P, size);//查search(P, size, 90);//释放内存的函数destroy(P);P = NULL;return 0;
}

链表的相关操作

seq_lis.h

#ifndef SEQLIST_H
#define SEQLIST_H
#include<myhead.h>
#define MAX 20
typedef int datatype;typedef struct
{datatype data[MAX];int len;
}SeqList,*SeqListPtr;SeqListPtr list_create();//创建
int list_empty(SeqListPtr L);//判空
int list_full(SeqListPtr L);//判满
int list_add(SeqListPtr L,datatype e);//增加
int list_insert_pos(SeqListPtr L,int pos,datatype e);//插入
void list_show(SeqListPtr L);//输出
int list_delete_pos(SeqListPtr L,int pos);//删除
int list_search_value(SeqListPtr L, datatype e);//查找
int list_update_pos(SeqListPtr L, int pos, datatype e);//更新(位置)
int list_update_value(SeqListPtr L, datatype old_e, datatype new_e);//更新(值)
#endif

seq_list.c

#include"seqlist.h"
//创建
SeqListPtr list_create()
{SeqListPtr L = (SeqListPtr)malloc(sizeof(SeqList));if(L == NULL){printf("申请失败\n");return NULL;}memset(L->data,0,sizeof(L->data));L->len=0;printf("创建成功\n");return L;
}
//判空
int list_empty(SeqListPtr L)
{return L->len==0;
}
//判满
int list_full(SeqListPtr L)
{return L->len==MAX;
}
//增加
int list_add(SeqListPtr L, datatype e)
{if(NULL==L || list_full(L)){printf("添加失败\n");return -1;}L->data[L->len] = e;L->len++;printf("添加成功\n");return 0;
}
//输出
void list_show(SeqListPtr L)
{if( L == NULL || list_empty(L)){printf("遍历失败\n");return;}printf("元素分别为:\n");for(int i =0;i<L->len;i++){printf("%d\t",L->data[i]);}printf("\n");
}
//插入
int list_insert_pos(SeqListPtr L,int pos,datatype e)
{if(NULL == L|| list_full(L)||pos<0||pos>L->len){printf("插入失败\n");return -1;}for( int i = L->len-1;i>=pos;i--){L->data[i+1] = L->data[i];}L->data[pos] = e;L->len++;printf("插入成功\n");return 0;
}
//删除
int list_delete_pos(SeqListPtr L,int pos)
{if(NULL == L|| list_empty(L)||pos<0||pos>=L->len){printf("删除失败\n");return -1;}for( int i=pos-1;i<L->len;i++){L->data[i] = L->data[i+1];}L->len--;printf("删除成功\n");return 0;
}
//查找
int list_search_value(SeqListPtr L, datatype e)
{if (L== NULL||list_empty(L)) {printf("查找失败\n");return -1;}
for (int i = 0; i < L->len; i++)
{if (e == L->data[i]){printf("找到了是第%d个值为=%d\n",i+1,L->data[i]);return i;}
}
printf("没有找到\n");
}
//更新(位置)
int list_update_pos(SeqListPtr L, int pos, datatype e)
{if (L==NULL || pos>=L->len||pos<0||list_empty(L)){printf("修改失败\n");return -1;}L->data[pos] = e;printf("修改成功\n");return 0;
}
//更新(值)
int list_update_value(SeqListPtr L, datatype old_e, datatype new_e)
{if (L==NULL || list_empty(L)){printf("修改失败\n");return -1;}int num = -1;for (int i = 0; i < L->len; i++){	if (old_e == L->data[i]){num = i;}}if ( num == -1){printf("没有这个值\n");return -1;}list_update_pos(L, num, new_e);return 0;
}

main.c

#include"seqlist.h"
int main(int argc, const char *argv[])
{SeqListPtr L = list_create();if(L == NULL){return -1;}list_add(L,1);list_add(L,2);list_add(L,3);list_add(L,4);list_add(L,5);list_insert_pos(L,0,9);list_insert_pos(L,4,9);list_insert_pos(L,7,9);list_show(L);list_delete_pos(L,2);list_show(L);list_search_value(L,3);list_update_pos(L,1,7);list_show(L);list_update_value(L,4,10);list_show(L);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

CH552的bootload程序IAP直接对ROM-flash修改数据(未尝试)

手动写bootload程序的可能 1&#xff0c;根据ch552g的使用手册内容查看到 2&#xff0c;在下面的参考文件的IAP文件夹中看到IAP文件 参考 下面程序中并没有跳转到厂家bootload的过程&#xff0c;这是直接通过控制有关的寄存器对FLSH进行直接写入和修改&#xff0c;这样可以认…

格式工厂,将所有的ts文件,合并为mp4

1、下载格式工厂 格式工厂 官方主页 - 免费多功能的多媒体文件转换工具 2、打开软件&#xff1a;视频合并&混流项 3、添加ts文件 4、点击【确定】&#xff0c;回到首页 5、首页中&#xff0c;点击【开始】开始转&#xff1a; 6、完成以后&#xff0c;会播放音乐并且右下…

Mysql中的几种常见日志

引言 本文是对Mysql中几种常见日志及其作用的介绍 一、error log&#xff08;错误日志&#xff09; MySQL 中的 error log&#xff08;错误日志&#xff09;是一种非常重要的日志类型&#xff0c;它记录了 MySQL 服务器在启动、运行及关闭过程中遇到的所有重要事件、错误信…

从零开始读RocketMq源码(五)Message的消费流程解析

目录 前言 准备 拉取服务和重平衡服务启动 初识PullRequest 重平衡服务 对重平衡资源进行排序 MessageQueue消息队列集合来源 Consumer消费者集合数据来源 确定分配资源策略 执行分配策略 初始化ProcessQueue 初始化PullRequest 内存队列填充PullRequest 消息拉取…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(二)-定义和缩写

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…

从操作系统层面认识Linux

描述进程-PCB Linux操作系统下的PCB是: task_struct https://www.cnblogs.com/tongyan2/p/5544887.htmlhttps://www.cnblogs.com/tongyan2/p/5544887.html校招必背操作系统面试题-什么是 PCB&#xff08;进程控制块&#xff09; &#xff1f;_哔哩哔哩_bilibili校招必背操作系…

notes for datawhale summer camp NPL task3

了解 Transformer 模型&#xff0c;并基于 Transformer 模型实现在机器翻译任务上的应用&#xff01; Transformer 介绍 基于循环或卷积神经网络的序列到序列建模方法是现存机器翻译任务中的经典方法。然而&#xff0c;它们在建模文本长程依赖方面都存在一定的局限性。 为了…

Mac 安装MySQL 配置环境变量 修改密码

文章目录 1 下载与安装2 配置环境变量3 数据库常用命令3.1 Mac使用设置管理mysql服务启停 4 数据库修改root密码4.1 知道当前密码4.2 忘记当前密码4.3 问题 参考 1 下载与安装 官网&#xff1a;https://www.mysql.com/ 找到开源下载方式 下载社区版 2 配置环境变量 对于Mac…

【Spring全家桶系列之核心篇 | Spring Cloud】 - 第七章 掌握Gateway核心技术,实现高效路由与转发

目录 前言示例创建一个服务提供者创建网关 创建common子项目 前言 Spring Cloud Gateway 是一个基于 Spring Boot 的非阻塞 API 网关服务&#xff0c;它提供了动态路由、请求断言、过滤器等功能。 以下是关于 Spring Cloud Gateway 的示例&#xff1a; 示例 创建一个服务提…

深度挖掘行情接口:股票市场中的关键金融数据API接口解析

在股票市场里&#xff0c;存在若干常见的股票行情数据接口&#xff0c;每一种接口皆具备独特的功能与用途。以下为一些常见的金融数据 API 接口&#xff0c;其涵盖了广泛的金融数据内容&#xff0c;其中就包含股票行情数据&#xff1a; 实时行情接口 实时行情接口&#xff1a…

使用小波分析实现文字种类自动识别

文章目录 数据简介开始实验小波分解得出结果结果分析误差分析 数据简介 各找一篇中文&#xff0c;日文&#xff0c;韩文&#xff0c;英文&#xff0c;俄文较长的学术论文。将论文转化为JPG格式。拆分每张JPG生成更多小的JPG。最终获得很多5个不同语言的JPG并且自带标签。数据链…

Python基础语法篇(下)+ 数据可视化

Python基础语法&#xff08;下&#xff09; 数据可视化 一、函数&#xff08;一&#xff09;函数的定义&#xff08;二&#xff09;函数的调用和传参 二、文件操作&#xff08;一&#xff09;文件读取和写入&#xff08;二&#xff09;文件对象及方法&#xff08;三&#xff09…

[003-02-10].第10节:Docker环境下搭建Redis主从复制架构

我的博客大纲 我的后端学习大纲 我的Redis学习大纲 1.cluster&#xff08;集群&#xff09;模式-docker版 哈希槽分区进行亿级数据存储 1.1.面试题&#xff1a;1~2亿条数据需要缓存&#xff0c;请问如何设计这个存储案例 1.回答&#xff1a;单机单台100%不可能&#xff0c;肯…

Adobe国际认证详解-影视后期

在当今的数字媒体时代&#xff0c;影视后期制作作为创意产业的核心环节&#xff0c;对于专业技能的要求日益提高。Adobe国际认证&#xff0c;作为全球创意设计领域的重要标杆&#xff0c;为影视后期制作人员提供了一个展示自我、提升技能的国际舞台。 何为影视后期&#xff1f;…

matlab 异常值检测与处理——Robust Z-score法

目录 一、算法原理1、概述2、主要函数3、参考文献二、代码实现三、结果展示四、相关链接本文由CSDN点云侠翻译,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、概述 Robust Z-score法也被称为中位数绝对偏差法。它类似于Z-sc…

10. Hibernate LazyFetch

1. 前言 本节和大家一起聊聊 Hibernate 中的 Lazy 和 Fetch 的区别&#xff0c;及两者适合的开发场景。通过本节课程的学习&#xff0c;你将了解到&#xff1a; 什么是延迟加载&#xff1b;延迟加载的意义。 2. 又见 get() 和 load() Session 对象提供了 2 个方法用来查询 &…

基于深度残差网络迁移学习的浸润性导管癌检测

1. 引言 癌症是一种异常细胞不受控制地分裂损害健康组织的疾病。皮肤或覆盖我们内脏的组织中的癌细胞被称为癌。乳房中的大多数癌是导管癌。侵袭性导管癌(Invasive Ductal Carcinoma, IDC)始于乳管&#xff0c;侵犯乳房周围纤维组织&#xff0c;晚期可通过血液扩散至淋巴结或身…

【鸿蒙学习笔记】位置设置・position・绝对定位・子组件相对父组件

官方文档&#xff1a;位置设置 目录标题 position・绝对定位・子组件相对父组件Row Text position position・绝对定位・子组件相对父组件 正→ ↓ Row Text position Entry Component struct Loc_position {State message: string Hello World;build() {Column() {Co…

二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a;…

求职学习day5

安排明天hr面 投一下平安可能。 hr面准备&#xff0c;复习java核心技术&#xff0c;复习java项目。 正视自己&#xff0c;调整心态。 也是很早接触了javaguide但是没有持续学习&#xff0c;项目介绍 | JavaGuide&#xff0c;面试前复习一下感觉还是很有收获的。 还有一些…