【带头学C++】----- 七、链表 ---- 7.5 学生管理系统(链表--下)

news2024/11/15 13:03:11

目录

1.补充上节插入节点的第三种方法(按序插入)

图示说明需求原理:

代码实现:

实际效果:

2.查询链表节点

1.方法调用

2.搜索函数实现 

3.搜索功能结果展示测试

3.删除链表

1.图示删除链表的原理

​编辑

2.函数调用

 3.代码实现删除函数

4.结果展示

4.释放整个链表

1.函数调用

2.释放链表的函数实现

 3.结果展示

 5.main函数最终所有代码


3.搜索功能结果展示测试

3.删除链表

4.释放整个链表


---------------------------------------------------------------------------------------------------------------------------------

1.补充上节插入节点的第三种方法(按序插入)

图示说明需求原理:

代码实现:

//链表插入之 按序插入
STU_NODE *insertLink(STU_NODE *head,STU_NODE tmp){
    //从堆区申请带插入的节点空间
    STU_NODE *pi = new STU_NODE();
    //给空间赋值
    *pi = tmp;
    pi->next = nullptr;

    //判断链表这个结点为不为空
    if(nullptr == head){  //不存在
        head = pi;

    }else{//链表存在
        //寻找插入点
        STU_NODE *pf=head, *pb = head;
        while((pb->num < pi->num)&& (pb->next != NULL))
        {
            //pf保存pb的位置
            pf = pb;//pb移动到下一个节点
            pb = pb->next;
        }
        //判断插入点的位置
        if(pb->num>=pi->num)//头部、中部插入
        {
            if(pb == head)
            {//头部
                pi->next = head;
                head = pi;
            }
            else{//尾部
                pf->next = pi;
                pi->next = pb; 
            }
        }else{//尾部插入
            pb->next = pi;
        }
    }
     return  head;
}

实际效果:

2.查询链表节点

1.方法调用

2.搜索函数实现 

STU_NODE *searchLink(STU_NODE *head,char *name){
    //判断链表是否存在
    //判断链表这个结点为不为空
    if(nullptr == head){  //不存在
        cout<<"Link is not exist"<<endl;
        return nullptr;
    }
    //逐个节点查询
    STU_NODE *pnode = head;
    while((strcpy_s(pnode->name,name) != 0) && (pnode->next != nullptr))
        pnode = pnode->next;
    if(strcpy_s(pnode->name,name) == 0){
        return pnode;
    }else{
        cout<<"未找到相关节点"<<endl;
    }
}

3.搜索功能结果展示测试

 

3.删除链表

1.图示删除链表的原理

2.函数调用

 3.代码实现删除函数

STU_NODE *deleteLink(STU_NODE *head,int num){
    //判断链表这个结点为不为空
    if(nullptr == head){  //不存在
        cout<<"Link is not exist"<<endl;
        return nullptr;
    }
    //逐个节点比较,寻找删除点
     STU_NODE *pf=head, *pb = head;
     while((pb->num != num) && (pb->next != nullptr)){
         pf = pb;
         pb = pb->next;
     }
     //找到删除点
     if(pb->num == num){
         if(pb == head) //头结点删除
         {
             head = head->next;
         }else{//中尾部删除
             pf->next = pb->next;
         }
            delete pb;
     }else{
         cout<<"未找到要删除的节点:"<<endl;
     }
     return head;
}

4.结果展示

 

4.释放整个链表

1.函数调用

2.释放链表的函数实现

STU_NODE *freeLink(STU_NODE *head)
{
    //判断链表这个结点为不为空
    if(nullptr == head){  //不存在
        cout<<"Link is not exist"<<endl;
        return nullptr;
    }
    //逐个节点遍历删除
    STU_NODE *pb = head;
    while (pb != nullptr) {
        head = head->next;
        delete pb;
        pb = head;
    }
    return head;
}

 3.结果展示

 5.main函数最终所有代码

#include <iostream>
#include "link.h"
#include <string.h>

using namespace std;
STU_NODE *head = nullptr;
int main()
{
    helpMessage();

    while(1){
        char cmd[64] = "";
        cout<<"请输入操作指令: ";
        cin >> cmd;

        if(strcmp(cmd,"help") == 0){
            helpMessage();
        }else if(strcmp(cmd,"insert") == 0){
            cout << "-------insert-------"<<endl;
            cout<<"请输入要插入的节点信息(num name):";
            STU_NODE tmp;
            cin>>tmp.num>>tmp.name;
            //往哪个链表插,此时需要一个指向链表的头结点指针
            head = insertLink(head,tmp);
        }else if(strcmp(cmd,"print") == 0){
             //遍历链表
            printLink(head);
        }else if(strcmp(cmd,"search") == 0){
             cout << "-------search-------"<<endl;
             cout<<"请输入查询的姓名:";
             char name[32]="";
             cin>>name;
             STU_NODE *ret = nullptr;
             ret = searchLink(head,name);
             if(ret != nullptr){
                      cout<<"查询的结构:num="<<ret->num<<", name="<<ret->name<<endl;
             }
        }else if(strcmp(cmd,"delete") == 0){
             cout << "-------delete-------"<<endl;
             cout << "请输入要删除的学号num: ";
             int num = 0;
             cin>>num;
             head = deleteLink(head,num);

        }else if(strcmp(cmd,"free") == 0){
             cout << "-------free-------"<<endl;
             head = freeLink(head);

        }else if(strcmp(cmd,"clear") == 0){
            system("cls");

        }else if(strcmp(cmd,"quit") == 0){
            head = freeLink(head);
            return 0;
        }
    }
    return 0;

}

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

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

相关文章

Thinkphp6实现定时任务功能

本文主要介绍命令启动定时任务的功能&#xff0c;按照CRMEB标准版的程序为大家详细的进行实现过程的介绍 首先创建安装Worker&#xff0c;执行composer require topthink/think-worker 安装在config/console.php中定义指令 timer > \crmeb\command\Timer::class 3. 对应图1…

vue3-组合式API

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue3-组合式API 目录 组合式API 1.1 什么是组合式API 1.2 为什么使用它 1.2.1 更好的逻辑复用#…

AutoSAR CANIF层配置代码分析

CAN物理控制单元 配置&#xff1a; 生成的代码&#xff1a; CanIf_CtrlStates 解析 类型&#xff1a; typedef union CanIf_CtrlStatesUTag {CanIf_CtrlStatesType raw[3];CanIf_CtrlStatesStructSType str; }CanIf_CtrlStatesUType;typedef struct sCanIf_CtrlStatesType {C…

Sublime Text:代码编辑器的卓越典范

Sublime Text是一款高效、强大且灵活的代码编辑器&#xff0c;在开发社区中广受欢迎。它不仅提供了丰富的功能&#xff0c;还具备美观的界面和卓越的性能&#xff0c;成为了众多开发者的首选工具。 Sublime Text的优点 高性能&#xff1a;Sublime Text具有极高的启动速度和响…

软件测试入门很容易,但想要深造就还是要费功夫

现如今&#xff0c;越来越多的外行人员开始转战到软件测试岗位&#xff0c;而这也让许多不了解软件测试人疑惑“软件测试有那么好学吗&#xff1f;为什么都开始转行到软件测试呢&#xff1f;” 而关于这两个问题的答案&#xff0c;作者在以下为大家进行了讲解&#xff0c;希望…

ts学习04-Es5中的类和静态方法 继承

最简单的类 function Person() {this.name "张三";this.age 20; } var p new Person(); console.log(p.name);//张三构造函数和原型链里面增加方法 function Person(){this.name张三; /*属性*/this.age20;this.runfunction(){console.log(this.name在运动);} }…

公网环境下使用VNC远程连接Ubuntu系统桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

ARCGIS网络分析

一、实验名称&#xff1a; 网络分析 二、实验目的&#xff1a; 通过本实验练习&#xff0c;掌握空间数据网络分析的基本方法。 三、实验内容和要求&#xff1a; 实验内容&#xff1a; 利用ARCGIS软件网络分析工具及相关空间数据&#xff0c;查找距离“名人故居”、“博物…

open3d ICP 配准

文章目录 Three common registration techniquesPoint-to-point techniquePoint-to-plane registration ICP registrationHelper visualization functionInputGlobal registrationExtract geometric featureInputRANSAC Point-to-point ICPPoint-to-plane ICP References Three…

2023年Java核心技术大会(Core Java Week 2023)-核心PPT资料下载

一、峰会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家&#xff1b;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近几年里&#xff0c;Java阵营的确受到了前所未有的挑战&#xff0c;出现了更多更…

解决 Python requests 库中 SSL 错误转换为 Timeouts 问题

解决 Python requests 库中 SSL 错误转换为 Timeouts 问题&#xff1a;理解和处理 SSL 错误的关键 在使用Python的requests库进行HTTPS请求时&#xff0c;可能会遇到SSL错误&#xff0c;这些错误包括但不限于证书不匹配、SSL层出现问题等。如果在requests库中设置verifyFalse&…

RAID技术复习笔记

Raid&#xff08;Redundant Array of independent Disks&#xff09;独立磁盘冗余阵列&#xff1a;磁盘阵列 Raid 分为:软raid、硬raid、软硬混合三种。 软Raid&#xff1a;所有的功能均有操作系统和CPU来完成&#xff0c;没有独立的raid控制、处理芯片和IO处理处理芯片。 硬R…

5.1异常处理

5.1异常处理 1. 什么是异常2. 异常分类2.1 Error2.2 Exception 3. 异常处理3.1 try-catch-finally终止finally执行的方法return关键字在异常处理的作用 1. 什么是异常 2. 异常分类 2.1 Error 2.2 Exception 2.2.1 非检查异常 2.2.2 检查异常 3. 异常处理 3.1 try-catch-fina…

R语言:利用biomod2进行生态位建模

在这里主要是分享一个不错的代码&#xff0c;喜欢的可以慢慢研究。我看了一遍&#xff0c;觉得里面有很多有意思的东西&#xff0c;供大家学习和参考。 利用PCA轴总结的70个环境变量&#xff0c;利用biomod2进行生态位建模&#xff1a; #------------------------------------…

旋极携手西班牙SoC-e公司,为中国客户提供高效可靠TSN通讯解决方案

2023年2月&#xff0c;旋极信息与西班牙SoC-e公司正式签订战略合作协议&#xff0c;成为其在中国区重要合作伙伴。 SoC-e是一家世界领先的基于FPGA技术的以太网通讯解决方案供应商&#xff0c;是一系列IP核开发领域的先锋&#xff0c;为关键任务实施网络化、同步性和安全性提供…

2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库&#xff0c;包含高处安装、维护、拆除模拟考试题答案和解析及高处安装、维护、拆除模拟考试题库练习。安全生产模拟考试一点通结合国家…

客户管理系统大盘点!推荐这五款

客户管理系统大盘点&#xff01;推荐这五款。 客户管理系统也就是CRM&#xff0c;可以说是企业刚需&#xff0c;国内外的客户管理系统也是数不胜数&#xff0c;到底有哪些是真正好用&#xff0c;值得推荐的呢&#xff1f;本文将为大家推荐这5款好用的客户管理系统&#xff1a;…

nvm:轻松管理多个 Node 版本 | 开源日报 No.80

nvm-sh/nvm Stars: 67.6k License: MIT Node Version Manager&#xff0c;是一个 POSIX 兼容的 bash 脚本&#xff0c;用于管理多个活动 node.js 版本。nvm 可以让你通过命令行快速安装和使用不同版本的 Node。它可以在任何符合 POSIX 标准的 shell&#xff08;sh、dash、ksh…

城市生命线丨市政综合管廊监测系统的效果

市政综合管廊&#xff0c;又被称为城市生命线&#xff0c;是我们在地下建造的一个智慧而高效的空间。它把市政、电力、通讯、燃气、给排水等各种管线集于一体&#xff0c;解决了城市中反复开挖路面、架空线网密集、管线事故频发等问题&#xff0c;为城市运行提供了重要的基础设…

python_面向对象中的特殊成员

一、几个常见的特殊成员 # 都只是语法&#xff0c;无特殊意义 class Foo(object):def __init__(self,a1,a2):self.a1 a1self.a2 a2def __call__(self,*args,**kwargs):print(11111,args,kwargs)return 123def __getitem__(self, item):print(item)return 8def __setitem__(s…