假期作业--数据结构

1、顺序表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建顺序表(堆区),2录入学生信息,3插入一个学生信息,4删除一个学生信息,5按照位置修改一个学生信息,6、按照姓名顺序查找一个学生是否存在7、对学生年龄直接插入排序(从小到大)。

#include <myhead.h>
#define N 40
typedef struct 
{
    int age;
    char name[20];
    int score;
}stu;
typedef struct node
{
        int len;
        stu data[N];
}List,*plist;
plist area()
{
    plist p=malloc(sizeof(List));
    if(p==NULL)
    {
        printf("创建失败\n");
        return NULL;
    }
    p->len=0;
    memset(p->data,0,sizeof(p->data));
    return p;
}
void input(plist L,int n)
{
    for(int i=0;i<n;i++)
    {
        printf("请输入%d学生年龄:",i+1);
        scanf("%d",&L->data[i].age);
        printf("请输入%d学生名字:",i+1);
        scanf("%s",L->data[i].name);
        printf("请输入%d学生成绩:",i+1);
        scanf("%d",&L->data[i].score);
        L->len++;
    }
}
void output(plist L)
{
    printf("学生信息如下:\n");
    for(int i=0;i<L->len;i++)
    {
        printf("%d\t%s\t%d\n",L->data[i].age,L->data[i].name,L->data[i].score);
    }
}
void insert(plist L)
{
    if(L->len==N)
    {
        printf("表格已满\n");
    }
    else
    {
        printf("请输入学生年龄:");
        scanf("%d",&L->data[L->len].age);
        printf("请输入学生名字:");
        scanf("%s",L->data[L->len].name);
        printf("请输入学生成绩:");
        scanf("%d",&L->data[L->len].score);
        L->len++;
    }
}
void find(plist L)
{
    char pos[20];
    int sub=-1;
    printf("请输入你要查找的学生:");
    scanf("%s",pos);
    for(int i=0;i<L->len;i++)
    {
        if(strcmp(pos,L->data[i].name)==0)
        {
            sub=i;
        }
    }
    if(sub==-1)
    {
        printf("没有此人\n");
    }
    else
    {
        printf("该学生在%d的位置\n",sub+1);
    }
}
void dele(plist L)
{
    char pos[20];
    int sub=-1;
    printf("请输入你要删除的人:");
    scanf("%s",pos);
    if(L==NULL||L->len==0)
    {
        printf("删除失败\n");
    }
    for(int i=0;i<L->len;i++)
    {
        if(strcmp(pos,L->data[i].name)==0)
        {
            sub=i;
        }
    }
    if(sub==-1)
    {
        printf("没有此人\n");
    }
    else
    {
        for(int i=sub;i<L->len;i++)
        {
            L->data[i]=L->data[i+1];
        }
        L->len--;
    }
}
void change(plist L)
{
    char pos[20];
    int sub=-1,key;
    printf("请输入你要修改的人:");
    scanf("%s",pos);
    printf("请输入修改后的成绩:");
    scanf("%d",&key);
    if(L==NULL||L->len==0)
    {
        printf("删除失败\n");
    }
    for(int i=0;i<L->len;i++)
    {
        if(strcmp(pos,L->data[i].name)==0)
        {
            sub=i;
        }
    }
    if(sub==-1)
    {
        printf("没有此人\n");
    }
    else
    {
        L->data[sub].score=key;
    }
}
void sort(plist L)
{
    stu t;
    int j=0;
    if(L==NULL||L->len==0)
    {
        printf("排序失败\n");
    }    
    for(int i=1;i<L->len;i++)
    {
        t=L->data[i];
        for(j=i-1;i>=0;j--)
        {
            if(L->data[i].age<L->data[j].age)
            {
                L->data[j+1]=L->data[j];
            }
            else
            {
                break;
            }
        }
        L->data[j+1]=t;
    }
}
int main(int argc, const char *argv[])
{
    int key,n;
    printf("请输入学生人数:");
    scanf("%d",&n);
    plist L=area();
    while(1)
    {
        printf("-------学生菜单-------\n");
        printf("-------输入1,录入学生信息-------\n");
        printf("-------输入2,插入学生信息-------\n");
        printf("-------输入3,删除学生信息-------\n");
        printf("-------输入4,修改学生信息-------\n");
        printf("-------输入5,输入姓名查找学生-------\n");
        printf("-------输入6,按学生年龄进行排序-------\n");
        printf("请输入:");
        scanf("%d",&key);
        switch(key)
        {
            case 1:
            {
                input(L,n);
                output(L);
            }break;
            case 2:
            {
                insert(L);
                output(L);
            }break;
            case 3:
            {
                dele(L);
                output(L);
            }break;
            case 4:
            {
                change(L);
                output(L);
            }break;
            case 5:
            {
                find(L);
            }break;
            case 6:
            {
                sort(L);
                output(L);
            }break;
            case 0:goto END;
            default:
            {
                printf("error\n");
            }
        }
    }
END:
    return 0;
}

2、单链表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建单链表,2录入学生信息,3删除一个学生信息,4按照成绩修改一个学生的年龄,5、按照姓名顺序查找一个学生是否存在。

#include <myhead.h>
typedef struct 
{
    int age;
    char name[20];
    int score;
}stu;
typedef struct node
{
    union
    {
        int len;
        stu data;
    };
    struct node *next;
}List,*plist;
plist area()
{
    plist p=malloc(sizeof(List));
    if(p==NULL)
    {
        printf("创建失败\n");
    }
    p->len=0;
    p->next=NULL;
    return p;
}
void insert(plist L)
{
    if(L==NULL)
    {
        printf("链表不存在\n");
    }
    plist p=malloc(sizeof(List));
    printf("请输入学生信息:");
    scanf("%d%s%d",&p->data.age,p->data.name,&p->data.score);
    p->next=L->next;
    L->next=p;
    L->len++;
}
void output(plist L)
{
    if(L==NULL||L->len==0)
    {
        printf("链表不存在或为空\n");
    }
    plist p=L;
    for(int i=0;i<L->len;i++)
    {
        p=p->next;
        printf("%d\t%s\t%d\n",p->data.age,p->data.name,p->data.score);
    }
}
void dele(plist L)
{
    char a[20];
    if(L==NULL||L->len==0)
    {
        printf("链表不存在或为空\n");
    }
    plist p=L;
    plist q=L->next;
    printf("输入要删除的学生:");
    scanf("%s",a);
    while(q!=NULL)
    {
        if(strcmp(q->data.name,a)==0)
        {
            p->next=q->next;
            free(q);
            q=NULL;
            L->len--;
            break;
        }
        else
        {
            p=q;
            q=p->next;
        }
    }
}
void change(plist L)
{
    int key,pos;
    if(L==NULL||L->len==0)
    {
        printf("链表为空或不存在\n");
    }
    printf("请输入成绩:");
    scanf("%d",&key);
    printf("请输入修改后的年龄:");
    scanf("%d",&pos);
    plist p=L;
    for(int i=0;i<L->len;i++)
    {
        p=p->next;
        if(p->data.score==key)
        {
            p->data.age=pos;
        }
    }
}
void find(plist L)
{
    char a[20];
    int sub=-1;
    if(L==NULL||L->len==0)
    {
        printf("链表为空或不存在\n");
    }
    plist p=L;
    printf("输入学生姓名:");
    scanf("%s",a);
    for(int i=0;i<L->len;i++)
    {
        p=p->next;
        if(strcmp(p->data.name,a)==0)
        {
            sub=1;
        }
    }
    if(sub==1)
    {
        printf("存在\n");
    }
    else
    {
        printf("不存在\n");
    }
}

int main(int argc, const char *argv[])
{
    int key,n;
    printf("请输入学生人数:");
    scanf("%d",&n);    
    plist L=area();
    while(1)
    {
        printf("-------学生菜单-------\n");
        printf("-------输入1,录入学生信息-------\n");
        printf("-------输入2,删除学生信息-------\n");
        printf("-------输入3,按成绩修改学生信息-------\n");
        printf("-------输入4,输入姓名查找学生-------\n");
        printf("请输入:");
        scanf("%d",&key);
        switch(key)
        {
            case 1:
            {
                for(int i=0;i<n;i++)
                {
                    insert(L);
                }
                output(L);
            }break;
            case 2:
            {
                dele(L);
                output(L);
            }break;
            case 3:
            {
                change(L);
                output(L);
            }break;
            case 4:
            {
                find(L);
            }break;
            case 0:goto END;
            default:
            {
                printf("error\n");
            }
        }
    }
END:
    return 0;
}

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

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

相关文章

Android.bp和Android.mk文件有的区别

文章目录 1. 构建系统2. 语法和格式3. 可维护性和扩展性4. 编译效率5. 未来趋势 在Android的构建系统中&#xff0c; Android.mk和 android.bp是用于定义如何编译项目文件的两种文件类型&#xff0c;它们有一些显著的区别。 1. 构建系统 Android.mk&#xff1a;使用于基于GN…

探索Facebook的区块链计划:未来社交网络的变革

随着区块链技术的迅速发展&#xff0c;社交网络领域正面临一场深刻的变革。Facebook&#xff0c;作为全球最大且最具影响力的社交平台之一&#xff0c;正在积极探索区块链技术的应用。本文将深入探讨Facebook的区块链计划&#xff0c;分析其潜在的变革性影响&#xff0c;并展望…

一款好看的WordPress REST API 主题

介绍&#xff1a; 主题特色&#xff1a; 使用Nuxtjs WordPress Rest Api 实现前后端分离&#xff0c;可完成多端部署&#xff1b; 主题支持自动切换黑夜模式。 使用说明&#xff1a; service 目录为wordpress主题文件&#xff0c;需要拷贝到wordpress主题目录下&#xff0…

【本社翻译】Unity官方XR开发电子书

上个月&#xff08;2024年7月&#xff09;&#xff0c;Unity 官方发布了一本聚焦 XR 开发的电子书&#xff0c;书名为《Create Virtual and Mixed Reality Experiences in Unity》。本书系统介绍了以 XR Interaction Toolkit 为代表的一系列 Unity XR 开发工具集&#xff0c;深…

java多线程(七)AQS(AbstractQueuedSynchronizer)技术解析:以赛跑起跑场景为例

AQS概括 核心思想 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是Java并发包中的一个核心同步器框架&#xff0c;它定义了一套多线程访问共享资源的同步机制。 其核心思想是&#xff1a;利用一个volatile的int类型的变量state来表示同步状态&#xff0c;并通过一…

ansible:

ansible&#xff1a; 远程自动化运维 ansible是基于python开发的配置管理和应用部署工具。 也是自动化运维的重要工具。 可以批量配置&#xff0c;部署&#xff0c;管理上千台主机。 只需要在一台主机配置ansible就可以完成其他主机的操作。 操纵模式&#xff1a; 1、模…

黑神话:悟空-配置推荐

显卡推荐&#xff08;按类别整理&#xff09; 1. GTX 10系列、GTX 16系列&#xff1a; 如果希望体验光线追踪&#xff0c;建议根据预算升级到RTX 40系列显卡。对于1080p分辨率&#xff0c;至少需要RTX 4060才能流畅运行。 2. RTX 20系列&#xff1a; RTX 2060、RTX 2070&#…

第二十七节、人物可互动标识

一、多个场景同时存在 方法&#xff1a;将另一个场景拖拽进 当前场景中 这样在一个场景中保存物体&#xff0c;另一个场景切换即可 创建一个场景名为上图&#xff08;这是一个持久化的场景&#xff09; 被激活的场景是粗体字的 二、代码 使用第二个代码获得player的子物体 …

SQL注入(cookie、base64、dnslog外带、搜索型注入)

目录 COOKIE注入 BASE64注入 DNSLOG注入—注入判断 什么是泛解析&#xff1f; UNC路径 网上邻居 LOAD_FILE函数 搜索型注入—注入判断 本文所使用的sql注入靶场为sqli-labs-master&#xff0c;靶场资源文件已上传&#xff0c;如有需要请前往主页或以下链接下载 信安必备…

AVI-Talking——能通过语音生成很自然的 3D 说话面孔

概述 论文地址&#xff1a;https://arxiv.org/pdf/2402.16124v1.pdf 逼真的人脸三维动画在娱乐业中至关重要&#xff0c;包括数字人物动画、电影视觉配音和虚拟化身的创建。以往的研究曾试图建立动态头部姿势与音频节奏之间的关联模型&#xff0c;或使用情感标签或视频剪辑作…

SpringBoot Web请求、响应

一、文章概述 请求方面主要讲&#xff0c;当前端向后端发出请求时&#xff0c;对于不同类型的参数后端都如何接收&#xff1b;对于响应&#xff0c;文章会讲解后端如何向前端响应数据以及如何使返回的数据具有统一的格式。 二、请求 2.1接收简单参数 Controller方法&#xf…

算法的学习笔记—二叉搜索树的后序遍历序列(牛客JZ33)

&#x1f600;前言 在数据结构与算法的学习中&#xff0c;二叉搜索树&#xff08;BST&#xff09;是一个重要的概念&#xff0c;而后序遍历则是树的遍历方式之一。今天&#xff0c;我们将深入探讨一个经典问题&#xff1a;如何判断一个给定的整数数组是否是某个二叉搜索树的后序…

【Prettier】代码格式化工具Prettier的使用和配置介绍

前言 前段时间&#xff0c;因为项目的prettier的配置和eslint格式检查有些冲突&#xff0c;在其prettier官网和百度了一些配置相关的资料&#xff0c;在此做一些总结&#xff0c;以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具&#xff0c;支持ja…

甘肃旅游服务平台代码--论文pf

TOC springboot422甘肃旅游服务平台代码--论文pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0…

Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积

语言 Java 99.岛屿数量 深搜 广搜 99. 岛屿数量 题目 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。你可…

【启明智显技术分享】实时操作系统RTOS核心机制与应用

在当今这个对实时性要求日益严苛的嵌入式系统时代&#xff0c;RTOS作为核心软件架构&#xff0c;正扮演着不可或缺的角色。而当我们深入探讨RTOS的广泛应用与优势时&#xff0c;不得不提到启明智显Model系列芯片以其卓越的性能、丰富的外设接口以及对RTOS系统的全面支持&#x…

Qt实现圆型控件的三种方法之子类化控件并重写paintEvent

前言 最近在研究绘制各种形状的控件&#xff0c;这里专门挑出圆形的控件进行记录&#xff0c;其它形状的也大差不差&#xff0c;会了圆形的之后其它的也类似。 正文 这里我挑出Label来进行举例。 子类化 QLabel 并重写 paintEvent 如果需要更复杂的自定义绘制&#xff0c;…

【CSS】使用 CSS 自定义属性(变量)-- var()

自定义属性&#xff08;有时候也被称作CSS 变量或者级联变量&#xff09;是由 CSS 作者定义的&#xff0c;它包含的值可以在整个文档中重复使用。由自定义属性标记设定值&#xff08;比如&#xff1a; --main-color: black;&#xff09;&#xff0c;由 var() 函数来获取值&…

算法全面剖析

算法 查找算法&#xff1a; 顺序查找&#xff1a; 基本思想&#xff1a; 顺序查找也称为线形查找&#xff0c;属于无序查找算法。从数据结构线形表的一端开始&#xff0c;顺序扫描&#xff0c;依次将扫描到的结点关键字与给定值k相比较&#xff0c;若相等则表示查找成功&am…

Nginx--监控

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、Nginx的基础监控 进程监控 端口监控 注意&#xff1a; 这两个是必须要加在zabbix监控&#xff0c;加触发器有问题及时告警。 nginx 提供了ngx…