实验:数据结构(结构体在单链表中的增删改查)

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <string>
using std::string;//strcmp需要加这三行代码,因为标准库中没有 
#include<malloc.h>

typedef struct
{
    char id[16];
    char name[20];
    double score;
} Student;
 
typedef struct LNode
{
    Student  data;
    struct LNode* next;//struct不能套用自身,但是指针就可以
} LNode, * LinkList;
 
//为了方便,我比较喜欢在主函数中初始化
//LinkList InList(LinkList L)对整个结构体赋值,一个指针权限不够,要用多一个指针
//{
//    L = (LinkList)malloc(sizeof(LNode));//创建一个头,从内存中查找出LNode大小的内存用malloc函数创建并转化成LinkList类型
//    L->next = NULL;
//    return L;
//}
 
void CreatList_H(LinkList  L)
{
    LNode* newNode;
    int i, n;
    printf("你要添加多少个?");
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        newNode = (LNode*)malloc(sizeof(LNode));
        printf("请输入你要添加的学号:");
        scanf("%s", &newNode->data.id);
        printf("请输入你要添加的姓名:");
        scanf("%s", &newNode->data.name);
        printf("请输入你要添加的分数:");
        scanf("%lf", &newNode->data.score);
        newNode->next = L->next;
        L->next = newNode;
    }
}
 
void PrintLinklist(LinkList L)
{
    LNode* p;
    p = L->next;
    int j=0,i=0;
    if (p == NULL) {
        printf("没有学生");
        return;
    }
    while(p != NULL)
    {
        printf("学号-------------姓名-----------------分数-----------------\n");
        printf("%-16s %-20s %-20.2lf \n", p->data.id, p->data.name, p->data.score);
        p = p->next;
    }
}
 
void SearchStudent(LinkList L)
{
    LNode* p;
    int i;
    char x[20];
    p = L->next;
    printf("你要查找的学生学号是什么:");
    scanf("%s", &x);
    while (p != NULL)
    {
        if (strcmp(x,p->data.id)==0) {
            printf("学号%s\n", p->data.id);
            printf("姓名%s\n", p->data.name);
            printf("分数%lf\n", p->data.score);
            return;
        }
        p = p->next;
    }
    printf("没有找到\n");
}
 
void DelStudent(LinkList L)
{
    
    LNode* p,*q;
    int i;
    char x[20];
    p = L;
    q = p->next;
    printf("你要删除的学生学号是什么");
    scanf("%s", &x);
    while (q)
    {
        if (strcmp(x, q->data.id) == 0) {
            p->next = q->next;
            printf("删除成功\n");
            return;
        }
        p = p->next;
        q = q->next;
    }
    printf("失败\n");
}
 /*
void InsertStudent(LinkList L){
    LNode* p, *q,*new;
    p = L;
    q = p->next;
    char x[20];
    int  y;
    new = (LNode*)malloc(sizeof(LNode));
    printf("你想插在谁的学号前面?");
    scanf("%s", &x);
    while (q!=NULL)
    {
        if (strcmp(x, q->data.id) == 0) {
    printf("你想插入的学号是什么?");
    scanf("%s", &new->data.id);
    printf("你想插入的姓名是什么?");
    scanf("%s", &new->data.name);
    printf("你想插入的分数是什么?");
    scanf("%lf", &new->data.score);
            new->next = q;
            p->next = new;
            printf("插入成功\n");
            return;
        }
        p = p->next;
        q = q->next;
    }
    printf("不存在这个学生");
}
*/ 
 
void ReviseStudent(LinkList L) {
    LNode* p;
    char x[20];
    p = L->next;
    printf("你想修改的学生学号是什么?");
    scanf("%s", &x);
    while (p != NULL)
    {
        if (strcmp(x, p->data.id) == 0) {
            printf("新修改后的学号是?");
            scanf("%s", &p->data.id);
            printf("新修改后的姓名是?");
            scanf("%s", &p->data.name);
            printf("新修改后的分数是?");
            scanf("%lf", &p->data.score);
            printf("修改成功成功\n");
            return;
        }
        p = p->next;
    }
    printf("不存在这个学生");
}
 
void ClearStudent(LinkList L) {
    L->next = NULL;
    printf("清空成功");
}
 
void CreatList_E(LinkList L) {
    LNode* newNode,*p;
    int i, n;
    printf("你要添加多少个?");
    scanf("%d", &n);
    p = L;
    while (p->next!=NULL)
    {
        p = p->next;
    }
    for (i = 0; i < n; i++)
    {
        newNode = (LNode*)malloc(sizeof(LNode));
        printf("请输入你要添加的学号:");
        scanf("%s", &newNode->data.id);
        printf("请输入你要添加的姓名:");
        scanf("%s", &newNode->data.name);
        printf("请输入你要添加的分数:");
        scanf("%lf", &newNode->data.score);
        newNode->next = NULL;
        p->next = newNode;
        p = newNode;
    }
}
 
 
 
 
int main()
{
    LinkList  L;
    L = (LinkList)malloc(sizeof(LNode));//创建一个头,从内存中查找出LNode大小的内存用malloc函数创建并转化成LinkList类型
    L->next = NULL;//直接在主函数初始化省去二级指针的麻烦
    int input;
    do
    {
        printf("\n\n\n\n");
        printf("\t\t|-------------------------------------------------------------|\n");
        printf("\t\t|                                                             |\n");
        printf("\t\t|                  ======================                     |\n");
        printf("\t\t|                   欢迎使用学生管理系统                      |\n");
        printf("\t\t|         Welcome to the student management system            |\n");
        printf("\t\t|                  ======================                     |\n");
        printf("\t\t|                                                             |\n");
        printf("\t\t|                  0.头插学生                                 |\n");
        printf("\t\t|                  1.尾插学生                                 |\n");
        printf("\t\t|                  2.查找学生                                 |\n");
        printf("\t\t|                  3.删除学生                                 |\n");
        printf("\t\t|                  4.修改学生                                 |\n");
        printf("\t\t|                  5.插入学生                                 |\n");
        printf("\t\t|                  6.清空全部学生                             |\n");
        printf("\t\t|                  7.查看全部学生                             |\n");
        printf("\t\t|                  8.退出系统                                 |\n");
        printf("\t\t|-------------------------------------------------------------|\n");
        printf("\n\t\t请输入您的选择:");
        scanf("%d", &input);
        switch (input)
        {
        case 0:
            CreatList_H(L);//CreatList_H(L);//L已经是指针,所以要用一级指针在函数接受,如果L加&,相当于二级指针
            break;
        case 1:
            CreatList_E(L);
            break;
        case 2:
            SearchStudent(L);
            break;
        case 3:
            DelStudent(L);
            break;
        case 4:
            ReviseStudent(L);
            break;
        //case 5:
          //  InsertStudent(L);
            //break;
        case 6:
            ClearStudent(L);
            break;
        case 7:
            PrintLinklist(L);
            break;
        case 8:
            printf("退出成功");
            break;
        default:
            printf("选择有误,请重新选择");
            break;
        }
    } while (input != 8);
    return 0;
}

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

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

相关文章

OpenKylin设置root密码

前言 新安装的OpenKylin系统应该root用户没有设置密码&#xff0c;但是可以使用sudo -i 临时获取root权限&#xff0c;不影响正常使用 当前是root用户 1、终端输入passwd命令 passwd2、按照提示输入新密码和确认密码 当前非root用户 1、终端输入sudo passwd root 命令 s…

【计算机毕业设】智慧食堂管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

cookie与session及其区别

一、cookie 1. 为什么需要cookie&#xff1f; web程序使用HTTP协议进行传输&#xff0c;而HTTP协议是无状态的协议&#xff08;即对事务处理无记忆性&#xff0c;如果后续处理需要使用前面的信息&#xff0c;只能重传&#xff0c;导致每次连接传送的数据量增大&#xff09;。c…

【VUE】Vue项目打包报告生成:让性能优化触手可及

Vue项目打包报告生成&#xff1a;让性能优化触手可及 Vue.js是一款流行的前端框架&#xff0c;开发者在使用Vue.js构建项目时&#xff0c;生产环境的性能优化尤为重要。为了帮助开发者分析和优化打包出来的资源&#xff0c;生成打包报告是一个不可或缺的步骤。本文将介绍几种在…

图深度学习(一):介绍与概念

目录 一、介绍 二、图的数据结构 三、图深度学习的基本模型 四、图深度学习的基本操作和概念 五、训练过程 六、主要应用场景 七、总结 一、介绍 图深度学习是将深度学习应用于图形数据结构的领域&#xff0c;它结合了图论的概念和深度学习的技术&#xff0c;用以处理和…

久菜盒子|留学|推荐信|结构抗震设计课、化工工艺设备设计

在众多学生当中&#xff0c;10这名学生给我留下了更深的印象&#xff0c;她对学习的认真态度、一丝不苟的精神&#xff0c;都让我感受到她的与众不同。因此&#xff0c;作为我校土木工程学院的前院长&#xff0c;我对于10申请贵校表示支持并毫无保留的推荐这位学生。 在结构抗震…

如何在浏览器Web前端在线编辑PPT幻灯片?

有时候在项目中我们会遇到需要在网页在线打开并编辑PPT文档保存到本地或者服务器指定位置&#xff0c;猿大师办公助手可以很方便的调用本机Office实现在网页上编辑PPT幻灯片&#xff0c;效果与本机Office打开PPT完全一样。 猿大师办公助手支持完整嵌入模式&#xff0c;也就是本…

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你&#xff0c;找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的&#xff0c;其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别&#xff0c;实话实说感觉比现在效果好。是因为现在的注意力都在tra…

.NET 设计模式—命令模式(Command Pattern)

简介 命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式&#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中&#xff0c;并传给调用对象。调用对象寻找可以处理该命令的合适的对象&#xff0c;并把该命令传给相应的对象&#xff0c;该对象执…

开源模型应用落地-chatglm3-6b-批量推理-入门篇(四)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

Normalizing Flows

需要学的是神经网络 f f f, 用于完成从source distribution (Pz)&#xff08;latent space&#xff0c;一般为高斯分布&#xff09;到 target distribution (Px) 的映射。 Normalizing Flows 是一种强大的生成模型&#xff0c;它通过学习一个可逆且易于计算的转换来将复杂的概…

Maven 总结

文章目录 第一章 Maven概述第一节 为什么要学习Maven&#xff1f;1、从『构建』角度解释①个人开发流程②团队开发流程 2、从『依赖』角度解释①jar包的规模②jar包的来源③jar包之间的依赖关系 第二节 What&#xff1f;什么是Maven&#xff1f;第二节 什么是Maven&#xff1f;…

FANUC机器人单轴零点标定的具体方法(全轴零点标定不方便时可采用)

FANUC机器人单轴零点标定的具体方法(全轴零点标定不方便时可采用) 前面和大家分享了FANUC机器人进行零点标定的原因和方法,具体可参考以下链接中的内容:: FANUC机器人进行零点标定的目的和具体方法步骤详解

封装原生html的table处理方法【参数类似eltable】

直接跑html即可 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>封装原生talbe</title> </…

Centos7下docker的jenkins配置启动vue、springboot生产环境

个人记录 上篇 Centos7下docker安装jenkins / Gitee上传私有仓库 安装插件 新建任务 多分支流水线 任务名称&#xff1a;ks-springboot&#xff08;后端&#xff09;/ ks-vue3&#xff08;前端&#xff09; 分支源 增加源&#xff1a;Git gitee复制git链接 https://g…

用例设计-抖音视频上下滑动用例

功能 正向case&#xff1a; 1、正常速度下滑&#xff0c;视频类、图片类、直播类资源能够正常展示 2、快速下滑&#xff0c;资源能够正常加载不会出现卡顿 3、下滑没有可加载的资源时&#xff0c;提示用户无新的资源 4、下滑幅度较大&#xff0c;更新一批新的资源 5、本地资源…

ECMA进阶1之从0~1搭建react同构体系项目1

ECMA进阶 ES6项目实战前期介绍SSRpnpm 包管理工具package.json 项目搭建初始化配置引入encode-fe-lint 基础环境的配置修改package.jsonbabel相关tsconfig相关postcss相关补充scripts脚本webpack配置base.config.tsclient.config.tsserver.config.ts src环境server端&#xff1…

简单的车牌号识别

目录 处理流程与界面各接口编写时遇到的一些问题上传图片识别结果标签显示中文 处理流程与界面 首先点击“上传图片”按钮&#xff0c;可以选择文件夹中含有汽车车牌的图片&#xff0c;并显示在“图片框”中。 点击“检测车牌”按钮&#xff0c;会先对“图片框”中即含有汽车车…

解析数据科学,探索ChatGPT背后的奥秘

在当今这个由数据驱动和AI蓬勃发展的时代&#xff0c;数据科学作为一门融合多种学科的综合性领域&#xff0c;对于推动各行各业实现数字化转型升级起着至关重要的作用。近年来&#xff0c;大语言模型技术发展态势强劲&#xff0c;为数据科学的进步做出了巨大贡献。其中&#xf…

高效解决Visual Studio Code中文乱码问题

文章目录 问题解决步骤 问题 Visual Studio Code新建一个文件编码方式总是默认GBK&#xff0c;如果我不修改成默认UTF-8&#xff0c;那么每次运行&#xff0c;如果有中文需要输出就会乱码&#xff01; 解决步骤 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记…