数据结构学生信息顺序表

主程序

#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

 

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

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

相关文章

MySQL Binlog详解:提升数据库可靠性的核心技术

文章目录 1. 引言1.1 什么是MySQL Bin Log&#xff1f;1.2 Bin Log的作用和应用场景 2. Bin Log的基本概念2.1 Bin Log的工作原理2.2 Bin Log的三种格式 3. 配置与管理Bin Log3.1 启用Bin Log3.2 配置Bin Log参数3.3 管理Bin Log文件3.4 查看Bin Log内容3.5 使用mysqlbinlog工具…

STM32崩溃问题排查

文章目录 前言1. 问题说明2. STM32&#xff08;Cortex M4内核&#xff09;的寄存器3. 崩溃问题分析3.1 崩溃信息的来源是哪里&#xff1f;3.2 崩溃信息中的每个关键字代表的含义3.3 利用崩溃信息去查找造成崩溃的点3.4 keil5中怎么根据地址找到问题点3.5 keil5上编译时怎么输出…

【NTN 卫星通信】Starlink基于终端用户的测量以及测试概述

1 概述 收集了一些starlink的资料&#xff0c;是基于终端侧部署在野外的一些测试以及测量结果。 2 低地球轨道卫星网络概述 低地球轨道卫星网络(lsn)被认为是即将到来的6G中真正实现全球覆盖的关键基础设施。本文介绍了我们对Starlink端到端网络特征的初步测量结果和观测结果&…

STM32-ADC+DMA

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. ADC模拟-数字转换器1.1 ADC模拟-数字转换器1.2 逐次逼近型ADC1.3 ADC框图1.4 ADC基本结构1.5 输入通道1.6 规则组的转换模式1.6.1 单次转换&#xff0c;非扫描模式1.6.2 连续转换&#xff0c;非扫描模式1.6.3 单次…

Tabu Search — 温和介绍

Tabu Search — 温和介绍 目录 Tabu Search — 温和介绍 一、说明 二、什么是禁忌搜索以及我可以在哪里使用它&#xff1f; 三、禁忌搜索原则 四、短期记忆和积极搜索&#xff1a; 五、举例时间 六、结论&#xff1a; 七、参考&#xff1a; 一、说明 最近&#xff0c;我参加了…

在DevEco运行typeScript代码,全网详细解决执行Set-ExecutionPolicy RemoteSigned报出的错

目录 基本思路 网络推荐 本人实践 如下操作,报错: 基本思路 //在DevEco运行typeScript代码 /** * 1.保证node -v出现版本,若没有,配置环境变量(此电脑-属性-高级系统变量配置-path-粘贴路径);DevEco在local.properties中可看到当前nodejs的路径 * 2.npm install …

海外仓一件代发功能自动化:海外仓WMS系统配置方法

根据数据显示&#xff0c;2014-2019年短短几年之间&#xff0c;跨境电商销售总额增长了160%以上。这为跨境电商商家和海外仓&#xff0c;国际物流等服务端企业都提供了巨大的发展机遇。 然而&#xff0c;作为海外仓&#xff0c;要想服务好跨境电商&#xff0c;仓库作业的每一个…

车载测试之-CANoe创建仿真工程

在现代汽车工业中&#xff0c;车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程&#xff0c;不仅能够模拟真实的车辆环境&#xff0c;还能大大提升测试效率和准确性。那么&#xff0c;CANoe是如何实现这些的呢&#xff1f; 车载测试中&#xff0…

刷题之合并两个有序数组(leetcode)

因为换了手机号码&#xff0c;之前leetcode的账号登不上去了&#xff0c;正好太久不刷题&#xff0c;很多思路都没了&#xff0c;所以重新开始刷leetcode&#xff01; 这道题很简单&#xff0c;指针模拟一下&#xff0c;从后往前考虑&#xff0c;先看最大值。 class Solution…

【大语言模型系列之Transformer】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

PLC电源模块

PM电源模块 为CPU信号模块及 其他的扩展设备、其他用电设备&#xff08;如传感器&#xff09;提供工作供电 接线和开关 状态显示 灯的闪烁示意看手册 PS电源模块 为CPU信号模块及其他的扩展设备提供工作供电。PS(System Power Supply) 外形与PM电源模块类似&#xff0c;状…

常用的MRI分析软件

MRI&#xff08;磁共振成像&#xff09;分析软件种类繁多&#xff0c;涵盖了从基础图像处理到高级数据分析的各个方面。这些软件广泛应用于临床诊断、研究和教育等领域。以下是一些常用的MRI分析软件&#xff1a; 开源软件 商用软件 特殊用途软件 在线工具和云平台 这些软件各…

MATLAB制作一个简单的函数绘制APP

制作一个函数绘制APP&#xff0c;输入函数以及左右端点&#xff0c;绘制出函数图像。 编写回调函数&#xff1a; 结果&#xff1a;

图片高效管理神器,随机高度切割,一键生成灰色图片,个性化处理随心所欲

在数字化时代&#xff0c;图片已成为我们生活和工作中不可或缺的一部分。然而&#xff0c;面对海量的图片资源&#xff0c;如何高效管理、快速处理&#xff0c;成为了许多人头疼的问题。今天&#xff0c;我们为您带来了一款全新的图片高效管理神器_——首助编辑高手&#xff0c…

Nginx 报错问题汇总

目录 一、nginx: [emerg] invalid number of arguments in "include" directive in C:\Program Files\nginx-1.15.4/conf/nginx.conf:61 总结&#xff1a; 二、nginx: [error] OpenEvent("Global\ngx_reload_2152") failed (5: Access is denied) 解决…

51-3 内网信息收集 - 获取RDP密码信息(没有实验成功)

获取常见应用软件凭据 注意: %USERPROFILE% 是环境变量。在使用系统权限时,可以将 %USERPROFILE% 替换为绝对路径,或使用其他用户的令牌进行操作。 获取 RDP 保存的凭据(远程桌面) 为了避免每次连接服务器都进行身份验证,经常使用 RDP 远程桌面连接远程服务器的用户可能…

ubuntu下运行程序时提示缺库问题的有效解决方法

目录 一、问题现象二、解决方式三、总结 一、问题现象 当我们平时在ubuntu上运行一个程序时时长会遇到如下情况&#xff0c;含义为本机缺少执行程序需要的库 这时候我们可能会根据缺少的库使用apt install 库名的模糊名字 进行安装&#xff0c;然后再去运行&#xff0c;此时可…

网页生成二维码、在线演示

https://andi.cn/page/621504.html

【OJ】运行时错误(Runtime Error)导致递归爆栈问题

在进行OJ赛时&#xff0c; 题目&#xff1a;给你一个整数n&#xff0c;问最多能将其分解为多少质数的和。在第一行输出最多的质数数量k,下一行输出k个整数&#xff0c;为这些质数。 出现运行时错误 代码如下&#xff1a; def main():# code heren int(eval(input()))list …

AI中药处方模型构建与案例

在中医领域,人工智能(AI)可以生成各种指令来辅助诊断、治疗和研究。 1. 诊断辅助指令: 根据患者的症状和体征,自动分析并生成可能的中医证候诊断建议。利用中医望闻问切四诊信息,智能识别关键症状,提供对应的中医辨证思路。2. 治疗建议指令: 根据辨证结果,自动推荐相应…