数据结构学生信息顺序表

主程序

#include "fun.h"

int main(int argc, const char *argv[])
{
    seq_p S=create_seq();
    stu data;
    printf("请问要输入几个学生的数据:");
    int n;
    scanf("%d",&n);
    while(n--)
    {
        printf("姓名:\n");
       scanf("%s",data.name);
        printf("学号:\n");
       scanf("%d",&data.id);
        printf("成绩:\n");
       scanf("%d",&data.score);
       insert_tail(S,data);

    }
    show_seq(S);
    printf("###################任意插入\n");
    stu data2={"张三",22,99};
    insert_loc(S,2,data2);//任意插入
    show_seq(S);
    del_loc(S,1);//任意删除
    printf("###################删除\n");
    show_seq(S);
    stu data3={"李四",35,100};
    chag_loc(S,3,data3);//修改
    printf("###################修改\n");
    show_seq(S);
    printf("###################查找\n");
    find_id(S,3);//id查找
    printf("###################去重\n");
    seq_rm(S);//q去重
    show_seq(S);
    printf("###################销毁\n");
    free_seq(&S);//销毁
    show_seq(S);

    
    return 0;
}


源码

#include "fun.h"

//顺序表的创建
seq_p create_seq()
{
    seq_p S=(seq_p)malloc(sizeof(seq));
    if(S==NULL)
    {
        printf("顺序表创建失败\n");
        return NULL;
    }
    S->len=0;
    return S;
}

//判满
int full_seq(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return -1;
    }
    return S->len==MAX;
}
//判空
int empty_seq(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return -1;
    }
    return S->len ==0;
}
//尾插
void insert_tail(seq_p S,stu data)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(full_seq(S))
    {
        printf("表已满,无需插入\n");
        return ;
    }
    S->data[S->len].id=data.id;
    S->data[S->len].score=data.score;
    strcpy(S->data[S->len].name,data.name);
    S->len++;

}
//输出表
void show_seq(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已满,无需插入\n");
        return ;
    }
    int i=0;
    while(1)
    {
        printf("姓名:%-4s学号:%-4d成绩:%-4d\n",S->data[i].name,S->data[i].id,S->data[i].score);
        if(++i==S->len)return;
    }
}
//任意位置插入学生
void insert_loc(seq_p S,int n,stu data)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(full_seq(S))
    {
        printf("表已满,无需插入\n");
        return ;
    }
    if(n<0||n>S->len)
    {
        return;
    }
    for(int i=S->len;i>n-1;i--)
    {
        strcpy(S->data[i].name,S->data[i-1].name);
        S->data[i].id=S->data[i-1].id;
        S->data[i].score=S->data[i-1].score;
    }
        strcpy(S->data[n-1].name,data.name);
        S->data[n-1].id=data.id;
        S->data[n-1].score=data.score;
        S->len++;
}
//任意位置删除
void  del_loc(seq_p S,int n)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需删除\n");
        return ;
    }
    if(n<0||n>S->len)
    {
        return;
    }
    for(int i=n-1;i<S->len;i++)
    {
        strcpy(S->data[i].name,S->data[i+1].name);
        S->data[i].id=S->data[i+1].id;
        S->data[i].score=S->data[i+1].score;
    }
        
        S->len--;
}
//按位置修改
void  chag_loc(seq_p S,int n,stu data)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需插入\n");
        return ;
    }
    if(n<0||n>S->len)
    {
        return;
    }
    int flag=0;
    for(int i=0;i<S->len;i++)
    {
        if(i==n-1)
        {   flag=1;
            strcpy(S->data[i].name,data.name);
            S->data[i].id=data.id;
            S->data[i].score=data.score;
        }
    }
    if(flag==0)
    {
        printf("修改失败\n");

    }
        
}
//按学号查找
void  find_id(seq_p S,int id)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需查找\n");
        return ;
    }
    int flag=0;
    for(int i=0;i<S->len;i++)
    {
        if(S->data[i].id==id)
        { 
            flag=1;
            printf("姓名:%-4s学号:%-4d成绩:%-4d\n",S->data[i].name,S->data[i].id,S->data[i].score);

        }
    }
    if(flag==0)
    {
        printf("查无此人\n");

    }
        
}
//去重
void  seq_rm(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需去重\n");
        return ;
    }
    
    for(int i=0;i<S->len;i++)
    {
        for(int j=i+1;j<S->len;j++)
        {
            if(S->data[i].name==S->data[j].name||S->data[i].id==S->data[j].id||S->data[i].score==S->data[j].score)
            {
                del_loc(S,j+1);
                j--;
            }


        }
    }

        
}
//销毁
void free_seq(seq_p *S)
{
    if(*S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    free(*S);
    *S=NULL;
}


头文件

#ifndef __FUN_H__
#define __FUN_H__
#include  <myhead.h>

#define MAX 30

typedef struct student
{
    char name[30];
    int id;
    int score;
}stu;

typedef struct sequece
{
    stu data[MAX];
    int len;
}seq,*seq_p;

seq_p create_seq();
int full_seq(seq_p);
int empty_seq(seq_p);
void insert_tail(seq_p S,stu data);
void show_seq(seq_p S);
void insert_loc(seq_p S,int n,stu data);
void  del_loc(seq_p S,int n);
void  chag_loc(seq_p S,int n,stu data);
void  find_id(seq_p S,int id);
void   seq_rm(seq_p S);
void  free_seq(seq_p *S);
#endif

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cloudflare tunnels tcp

这里是官网的说明Cloudflare Tunnel Cloudflare Zero Trust docs 根据实际情况安装环境 tunnels除了http,https协议是直接暴露公网&#xff0c;tcp是类似ssh端口转发。 在需要内网穿透的局域网找一条机子部署代理 我这边是window cloudflared tunnel login #生成一个身份校…

防火墙概述

1、防火墙 防火墙顾名思义就是防止火灾发生时&#xff0c;火势烧到其它区域&#xff0c;使用由防火材料砌的墙。在网络安全中&#xff0c;防火墙的作用就是保护本地网络不受到外部网络或恶意程序的伤害。 防火墙的核心任务是控制和防护&#xff0c;即通过安全策略识别流量并做…

【周末闲谈】AI“抢饭碗”?绝对不是危言耸听

AI是在帮助开发者还是取代他们? 在软件开发领域,生成式人工智能(AIGC)正在改变开发者的工作方式。无论是代码生成、错误检测还是自动化测试,AI工具正在成为开发者的得力助手。然而,这也引发了对开发者职业前景和技能需求变化的讨论。AI究竟是在帮助开发者还是取代他们?…

【论文阅读】-- Visual Analytics for Model Selection in Time Series Analysis

时间序列分析中模型选择的可视化分析 摘要1 引言2 相关工作3 问题表征3.1 Box-Jenkins 方法论3.2 ARIMA 和季节性 ARIMA 模型3.3 模型规范3.4 模型拟合3.5 模型诊断 4 需求分析5 VA 用于时间序列分析中的模型选择5.1 VA选型流程说明5.2 TiMoVA 原型5.2.1 实施选择5.2.2 图形用户…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展&#xff08;无规律数据&#xff09; 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

MyBatis中二级缓存的配置与实现原理

大家好&#xff0c;我是王有志&#xff0c;一个分享硬核 Java 技术的金融摸鱼侠&#xff0c;欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 上一篇文章《MyBatis中一级缓存的配置与实现原理》中&#xff0c;我们已经掌握了 MyBatis 一级缓存的配置&#xff08;虽然…

使用AOP思想实现开闭原则下的流水日志输出

主要实现思想&#xff1a; 通过实现Convert接口来抽取公共组件&#xff0c;获取想要的标准模型。 现在有两个订单场景&#xff0c;一个保存订单&#xff0c;一个为更新订单。构造如下的服务类&#xff1a; import org.springframework.stereotype.Service;Service public clas…

pwm 呼吸灯(如果灯一直亮或者一直灭)

&#xff08;这个文章收藏在我的csdn keil文件夹下面&#xff09; 如果这样设置预分频和计数周期&#xff0c;那么算出来的pwm频率如下 人眼看起来就只能是一直亮或者灭&#xff0c;因为pwm的频率太高了&#xff0c;但是必须是频率够高&#xff0c;才能实现呼吸灯的缓慢亮缓慢…

Django之项目开发(一)

一、项目的生命周期介绍 传统Web 项目的生命周期指的是从开始构建一个网站到该网站完成并维护的整个过程。通常情况下,Web 项目的生命周期包括以下几个阶段 需求分析阶段:在这个阶段,项目组会与客户进行沟通,确定网站的功能、内容和设计。 主要由产品经理参与产出思路与方案…

ChatGPT-4o大语言模型优化、本地私有化部署、从0-1搭建、智能体构建等高级进阶

目录 第一章 ChatGPT-4o使用进阶 第二章 大语言模型原理详解 第三章 大语言模型优化 第四章 开源大语言模型及本地部署 第五章 从0到1搭建第一个大语言模型 第六章 智能体&#xff08;Agent&#xff09;构建 第七章 大语言模型发展趋势 第八章 总结与答疑讨论 更多应用…

Nginx auth 的权限验证

基本流程 整个流程为&#xff1b;以用户视角访问API开始&#xff0c;进入 Nginx 的 auth 认证模块&#xff0c;调用 SpringBoot 提供的认证服务。根据认证结果调用重定向到对应的 API 接口或者 404 页面。 查看版本保证有 Nginx auth 模块 由于 OpenAI 或者本身自己训练的一套…

数据结构(其一)--基础知识篇

1. 数据结构三要素 1.1 数据结构的运算 即&#xff0c;增删改查 1.2 数据结构的存储结构 2. 数据类型&#xff0c;抽象数据类型 数据类型&#xff1a; &#xff08;1&#xff09;. 原子类型&#xff1a;bool、int... &#xff08;2&#xff09;. 结构类型&#xff1a;类、…

Linux多线程(中)

Linux多线程&#xff08;中&#xff09; 1.Linux线程互斥1.1互斥量的接口1.1.1初始化互斥量1.1.2销毁互斥量1.1.3互斥量加锁和解锁 1.2修改代码1.3互斥量实现原理 2.可重入VS线程安全3.死锁4.Linux线程同步5.生产者消费者模型 &#x1f31f;&#x1f31f;hello&#xff0c;各位…

Java 自定义集合常量

文章目录 Java 自定义集合常量一、普通方法自定义集合常量信息1、定义 Map 集合信息&#xff08;1&#xff09;方法一&#xff1a;使用静态代码块&#xff08;2&#xff09;方法二&#xff1a;简单定义 Map 常量 2、定义 List 集合信息3、定义 Set 集合信息 二、通过 Collectio…

用win的控制台去远程连接虚拟机linux的终端

以Ubuntu为例&#xff0c;首先确保Ubuntu已经安装了ssh服务 sudo apt-get install openssh-server输入密码 安装完毕后查看ssh状态是否开启 sudo systemctl status ssh 显示绿色激活状态&#xff0c;可以关闭或开启 对应start和stop winr打开win端控制台 输入 ssh -p 22 …

python-22-零基础自学python-数据分析基础 打开文件 读取文件信息

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版 知识点&#xff1a; 读取文件 、逐行读取文件信息等 练习内容&#xff1a; 练习10-1:Python学习笔记 在文本编辑器中新建一个文件&#xff0c;写几句话来总结一下你至此学到的Python知识&#xff0c;其中…

ASCII码对照表(Matplotlib颜色对照表)

文章目录 1、简介1.1 颜色代码 2、Matplotlib库简介2.1 简介2.2 安装2.3 后端2.4 入门例子 3、Matplotlib库颜色3.1 概述3.2 颜色图的分类3.3 颜色格式表示3.4 内置颜色映射3.5 xkcd 颜色映射3.6 颜色命名表 4、Colorcet库5、颜色对照表结语 1、简介 1.1 颜色代码 颜色代码是…

声明队列和交换机 + 消息转换器

目录 1、声明队列和交换机 方法一&#xff1a;基于Bean的方式声明 方法二&#xff1a;基于Spring注解的方式声明 2、消息转换器 1、声明队列和交换机 方法一&#xff1a;基于Bean的方式声明 注&#xff1a;队列和交换机的声明是放在消费者这边的&#xff0c;这位发送的人他…

OSS存储桶漏洞总结

简介 OSS&#xff0c;对象存储服务&#xff0c;对象存储可以简单理解为用来存储图片、音频、视频等非结构化数据的数据池。相对于主机服务器&#xff0c;具有读写速度快&#xff0c;利于分享的特点。 OSS工作原理&#xff1a; 数据以对象&#xff08;Object&#xff09;的形式…

Java高级重点知识点-21-IO、字节流、字符流、IO异常处理、Properties中的load()方法

文章目录 IOIO的分类 字节流字节输出流【OutputStream】字节输入流【InputStream】图片复制 字符流字符输入流【FileReader】字符输出流【FileWriter】 IO异常的处理&#xff08;扩展知识&#xff09;Properties属性集(java.util) IO Java中I/O操作主要是指使用 java.io 包下的…