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

news2024/9/21 18:53:52

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

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.coloradmin.cn/o/1941051.html

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

相关文章

【Git】(基础篇五)—— Git进阶

Git进阶 之前关于本地和远程仓库的各种操作都已经非常基础了&#xff0c;本文介绍git的一些进阶使用和设置 用户名和邮箱 之前介绍的每一次提交(commit) 都会产生一条日志(log) 信息&#xff0c;这条日志信息不仅会记录提交信息&#xff0c;还会记录执行提交操作的这个用户的…

【QAC】分布式部署下其他机器如何连接RLM

1、 文档目标 解决分布式部署下其他机器如何连接RLMLicense管理器。 2、 问题场景 分布式部署下QAC要在其他机器上单独运行扫描&#xff0c;必须先连接RLMLicense管理器&#xff0c;如何连接&#xff1f; 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2、机器环境…

ClusterIP、NodePort、LoadBalancer 和 ExternalName

Service 定义 在 Kubernetes 中&#xff0c;由于Pod 是有生命周期的&#xff0c;如果 Pod 重启它的 IP 可能会发生变化以及升级的时候会重建 Pod&#xff0c;我们需要 Service 服务去动态的关联这些 Pod 的 IP 和端口&#xff0c;从而使我们前端用户访问不受后端变更的干扰。 …

SpringBoot Security OAuth2实现单点登录SSO(附源码)

文章目录 基础概念1. 用户认证2. 单点登录&#xff08;SSO&#xff09;3. 授权管理4. 安全性和配置 逻辑实现配置认证服务器配置Spring Security两个客户端 页面展示本篇小结 更多相关内容可查看 附源码地址&#xff1a;https://gitee.com/its-a-little-bad/SSO.git 基础概念 …

HarmonyOS 状态管理(一)

1. HarmonyOS 状态管理 1.1. 说明 官方文档&#xff08;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-state-management-V5&#xff09; 1.1.1. 状态管理&#xff08;V1稳定版&#xff09; 状态管理&#xff08;V1稳定版&#xff09;提供了多种…

90+ Python 面试问答(2024 版)

90+ Python 面试问答(2024 版) 一、介绍 欢迎来到准备数据科学工作面试的第一步。这里有一个全面而广泛的 Python 面试问题和答案列表,可帮助您在面试中取得好成绩并获得理想的工作!Python 是一种解释型通用编程语言,由于其在人工智能 (AI) 中的使用,如今需求量很大。…

python大小写转换、驼峰大小写转换

一 大小写转换 1第1个单词的首字母大写 capitalize() 2每个单词的首字母大写 title() 3所有字母大小写转换 swapcase() 代码示例 texttoday is sundaYprint(text.capitalize()) # 仅第1个单词的首字母大写 print(text.title()) # 每个单词的首字母大写 print(text.swapcase…

Vue 多选下拉框+下拉框列表中增加标签

1、效果图 2、代码部分 &#xff08;1&#xff09;代码 <el-select class"common-dialog-multiple multipleSelectStyle" change"clusterListChange" v-model"form.clusterId" placeholder"请先选择" multiple filterable defaul…

【BUG】已解决:AttributeError: ‘str‘ object has no attribute ‘read‘

AttributeError: ‘str‘ object has no attribute ‘read‘ 目录 AttributeError: ‘str‘ object has no attribute ‘read‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998https://bbs.csdn.net/topics/617804998 欢迎来到我的主…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下&#xff0c;通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

error C2011: “sockaddr_in”:“struct”类型重定义的修改办法

问题 windows.h和winsock2.h存在有类型重定义,往往体现在头文件包含winsock2.h和windows.h时出现编译错误: error C2011: “sockaddr_in”:“struct”类型重定义 2>D:\Windows Kits\10\Include\10.0.22000.0\shared\ws2def.h(442,5): error C2143: 语法错误: 缺少“}”(…

为什么大家都想学大模型?一文揭秘!

小编只是普通的汽车软件工程师&#xff0c;想了解人工智能&#xff0c;又感觉好遥远&#xff0c;仔细的看了半天&#xff0c;就一个想法 好好拥抱AI吧。真的好强。 相比之下&#xff0c;Autosar 是个 der 啊。。。。 人工智能基础概念全景图 AI -> 机器学习 机器学习 ->…

探索 Python 的新视界:ttkbootstrap 库

探索 Python 的新视界&#xff1a;ttkbootstrap 库 背景与简介 在 Python 的世界中&#xff0c;库的丰富性是其强大功能的重要体现之一。今天&#xff0c;我们将一起探索一个令人兴奋的库——ttkbootstrap。这个库不仅提供了丰富的界面组件&#xff0c;还使得界面设计变得简单…

Python脚本批量下载ECWMF免费数据教程

前情提要 最近需要使用EC的一些数据&#xff0c;摸索下载过程中顺便记录下来&#xff0c;综合了EC上免费数据集的两个数据集的下载方式&#xff0c;使用python脚本下载 相比在网站上操作下载&#xff0c;个人更推荐脚本下载&#xff0c;官方已经封装好了两个库直接可以方便使…

HTML5实现好看的天气预报网站源码

文章目录 1.设计来源1.1 获取天气接口1.2 PC端页面设计1.3 手机端页面设计 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_4…

Django+vue自动化测试平台(27)-- 封装websocket测试

websocket概述&#xff1a; WebSocket 是一种在单个 TCP 连接上进行全双工通信(Full Duplex 是通讯传输的一个术语。通信允许数 据在两个方向上同时传输&#xff0c;它在能力上相当于两个单工通信方式的结合。全双工指可以同时&#xff08;瞬时&#xff09;进 行信号的双向传输…

Linux第四节课(指令与权限)

1、date指令(时间) 程序运行到自己的每一个关键时刻&#xff0c;都要自己打日志&#xff01; 日志包括时间、日志等级、日志具体信息、其他信息等&#xff0c;然后按照行为单位写入文件中&#xff0c;这个文件被称为日志文件&#xff01; 在日志文件中筛选信息时&#xff0c…

idea springBoot启动时覆盖apollo配置中心的参数

vm options -Dorder.stat.corn“0/1 * * * * ?” 只有vm options, -D参数才能覆盖apollo参数 program arguments –key01val01 --key02val02 environment varibales envFAT;key02val02;key03val03

视觉巡线小车——STM32+OpenMV(四)

目录 前言 一、整体控制思路 二、代码实现 1.主函数 2.定时器回调函数 总结 前言 通过以上三篇文章已将基本条件实现&#xff0c;本文将结合以上内容&#xff0c;进行综合控制&#xff0c;实现小车的视觉巡线功能。 系列文章请查看&#xff1a;视觉巡线小车——STM32OpenMV系列…

BUUCTF [WUSTCTF2020]朴实无华

首先进来不知道要干啥&#xff0c;上dirsearch扫出个机器人协议&#xff0c;一看有点东西 直接访问很明显这不是flag 主页面看他说什么不能修改头部&#xff0c;看一下数据包 发现了好东西 看到源码&#xff0c;又得绕过了。不过这编码有点问题导致乱码了 找个在线网站稍微恢复…