华清数据结构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://www.mzph.cn/diannao/47681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql —— 事务

目录 什么是事务&#xff1f; 两种方式实现事务&#xff1a; 方法一 方法二&#xff1a; 事务四大特性(简称ACID) 并发事务问题&#xff08;面试题&#xff09; 事务隔离级别 什么是事务&#xff1f; 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff…

Web开发:ASP.NET CORE前后端交互之AJAX(含基础Demo)

目录 一、后端 二、前端 三、代码位置 四、实现效果 五、关键的点 1.后端传输给前端&#xff1a; 2.前端传输给后端 一、后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; using WebAppl…

StarRocks on AWS Graviton3,实现 50% 以上性价比提升

在数据时代&#xff0c;企业拥有前所未有的大量数据资产&#xff0c;但如何从海量数据中发掘价值成为挑战。数据分析凭借强大的分析能力&#xff0c;可从不同维度挖掘数据中蕴含的见解和规律&#xff0c;为企业战略决策提供依据。数据分析在营销、风险管控、产品优化等领域发挥…

使用 spring MVC 简单的案例 (1)计算器

一、计算器 1.1前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> …

签名优化:请求数据类型不是`application/json`,将只对随机数进行签名计算,例如文件上传接口。

文章目录 I 签名进行请求数据类型类型判断1.1 常见的ContentType1.2 签名切面处理1.3 文件上传案例1.4 处理接口信息背景: 文件上传接口的请求数据类型通常为multipart/form-data,方便携带文本域和使用接口文档进行调试。 如果携带JSON数据,不方便调试接口。 前端数据也要特…

JAVA中的File类,文件流,字节流和字符流超级详解(1.8万字干货 )

1.File类 在Java中&#xff0c;File 类是 java.io 包中的一个重要类&#xff0c;它提供了与文件或目录路径名相关的一系列操作。File 类可以用来创建、删除、重命名文件和目录&#xff0c;也可以用来获取文件或目录的属性&#xff0c;比如大小、最后修改时间等。 File类的常用方…

Mac Electron 应用如何进行签名(signature)和公证(notarization)?

最近很多客户反映&#xff0c;从官网下载的Mac Electron应用打不开&#xff0c;直接报病毒&#xff0c;类似于这种&#xff1a; 这是因为在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存…

第6章 单片机的定时器/计数器

6.1 定时/计数器的结构与工作原理 6.2 定时器的控制 6.3 定时/计数器的工作方式 6.4 定时/计数器的编程和应用 6.1 定时/计数器的结构与工作原理 6.1.1 定时/计数器的基本原理 纯软件定时/计数方法&#xff1a; 定时——空循环预定周次&#xff0c;等待预定时间 计数—…

【Qt】之【Bug】error:C1083 无法打开包括文件

背景 a.cpp引用b.h正常&#xff0c;但是a.h引用b.h就报 “无法打开包括文件”的错误 分析 查看“编译输出”&#xff0c;显示不是a.h引起的错误&#xff0c;而是C插件&#xff0c; 查看后发现&#xff0c;C插件引用了a所在插件pro&#xff0c;但是没有引用a依赖的b所在的插件…

Axure中继器进阶指南:打造专业级交互

中继器进阶篇 前言 经过了基础篇的学习,我们已经掌握了中继器的基本操作,接下来来解锁中继器的进阶操作。 1. 修改删除指定行 首先拖入中继器,加上【修改】 【删除】的按钮,然后给修改按钮添加单击事件选择【更新行】。 这里可以看到我们在中继器内部添加的事件,在编…

IDEA关联数据库

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试&#xff08;Debug&#xff09; 第七章 …

2024-07-16 Unity插件 Odin Inspector7 —— Number Attributes

文章目录 1 说明2 Number 特性2.1 MaxValue / MinValue2.2 MinMaxSlider2.3 ProgressBar2.4 PropertyRange2.5 Unit2.6 Wrap 1 说明 ​ 本文介绍 Odin Inspector 插件中有关 Number 特性的使用方法。 2 Number 特性 2.1 MaxValue / MinValue 在 Inspector 窗口中对象能够被设…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之④:数据分析之三(数据展示)

概述 在先前探讨的文章中&#xff0c;我们构建了一个全面的数据测试体系&#xff0c;该体系遵循“数据获取—数据治理—数据分析”的流程。如何高效地构建数据可视化看板&#xff0c;以直观展现分析结果&#xff0c;正逐渐成为利用新兴技术提升效能的关键领域。伴随业务拓展、数…

《驾驭AI浪潮:伦理挑战与应对策略》

AI发展下的伦理挑战&#xff0c;应当如何应对&#xff1f; 人工智能飞速发展的同时&#xff0c;也逐渐暴露出侵犯数据隐私、制造“信息茧房”等种种伦理风险。随着AI技术在社会各个领域的广泛应用&#xff0c;关于AI伦理和隐私保护问题日趋凸显。尽管国外已出台系列法规来规范…

YOLOv7网络结构学习

YOLOV7详细解读&#xff08;一&#xff09;网络架构解读 YOLOV7学习记录之原理代码介绍 【Make YOLO Great Again】YOLOv1-v7全系列大解析&#xff08;Backbone篇&#xff09; yolov7 图解 深入浅出 Yolo 系列之 Yolov7 基础网络结构详解 我觉得Head、Neck和Head的划分不太…

从产品手册用户心理学分析到程序可用性与易用性的重要区别

注&#xff1a;机翻&#xff0c;未校对。 Designing for People Who Have Better Things To Do With Their Lives 为那些生活中有更重要事情要做的人设计 When you design user interfaces, it’s a good idea to keep two principles in mind: 在设计用户界面时&#xff0c;…

三大ip代理服务商PK,IPFoxy黑马逆袭成首选?

最近亚马逊的Prime Day ,小编我呀忙得不可开交。因为小编负责的店铺数量多且需要稳定的长期连接&#xff0c;我用某一海外ip代理竟然不稳定&#xff0c;这还是号称老牌的ip代理服务商&#xff0c;因为它的漏洞&#xff0c;让我加班了好久处理工作上的问题。 吃一堑&#xff0c…

RPA鼠标按键使用技巧

RPA鼠标按键使用技巧 Mouse.MouseAuto.Action命令出错&#xff0c;调用的目标发生了异常&#xff0c;Exception in Mouse.Action元素不可用怎么解决 出现问题 1.想要实现的效果鼠标移动到录屏工具的小球上2.点击开始按钮开始录屏现象&#xff0c;鼠标没有移动痕迹&#xff0c…

【C++】C++ 职工信息管理系统(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

C++系列-Vector模拟实现(补充)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 迭代器失效 这篇文章是基于上一篇的Vector的模拟实现的补充知识点&#xff0c;首先我们需要重点关注的便是迭代器失效的问题。 void test_vector3(){std::vector<int> v…