码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【带头学C++】----- 七、链表 ---- 7.5 学生管理系统(链表--下)


    目录

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

    图示说明需求原理:

    代码实现:

    实际效果:

    2.查询链表节点

    1.方法调用

    2.搜索函数实现 

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

    3.删除链表

    1.图示删除链表的原理

    ​编辑

    2.函数调用

     3.代码实现删除函数

    4.结果展示

    4.释放整个链表

    1.函数调用

    2.释放链表的函数实现

     3.结果展示

     5.main函数最终所有代码


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

    3.删除链表

    4.释放整个链表


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

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

    图示说明需求原理:

    代码实现:

    1. //链表插入之 按序插入
    2. STU_NODE *insertLink(STU_NODE *head,STU_NODE tmp){
    3. //从堆区申请带插入的节点空间
    4. STU_NODE *pi = new STU_NODE();
    5. //给空间赋值
    6. *pi = tmp;
    7. pi->next = nullptr;
    8. //判断链表这个结点为不为空
    9. if(nullptr == head){ //不存在
    10. head = pi;
    11. }else{//链表存在
    12. //寻找插入点
    13. STU_NODE *pf=head, *pb = head;
    14. while((pb->num < pi->num)&& (pb->next != NULL))
    15. {
    16. //pf保存pb的位置
    17. pf = pb;//pb移动到下一个节点
    18. pb = pb->next;
    19. }
    20. //判断插入点的位置
    21. if(pb->num>=pi->num)//头部、中部插入
    22. {
    23. if(pb == head)
    24. {//头部
    25. pi->next = head;
    26. head = pi;
    27. }
    28. else{//尾部
    29. pf->next = pi;
    30. pi->next = pb;
    31. }
    32. }else{//尾部插入
    33. pb->next = pi;
    34. }
    35. }
    36. return head;
    37. }

    实际效果:

    2.查询链表节点

    1.方法调用

    2.搜索函数实现 

    1. STU_NODE *searchLink(STU_NODE *head,char *name){
    2. //判断链表是否存在
    3. //判断链表这个结点为不为空
    4. if(nullptr == head){ //不存在
    5. cout<<"Link is not exist"<
    6. return nullptr;
    7. }
    8. //逐个节点查询
    9. STU_NODE *pnode = head;
    10. while((strcpy_s(pnode->name,name) != 0) && (pnode->next != nullptr))
    11. pnode = pnode->next;
    12. if(strcpy_s(pnode->name,name) == 0){
    13. return pnode;
    14. }else{
    15. cout<<"未找到相关节点"<
    16. }
    17. }

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

     

    3.删除链表

    1.图示删除链表的原理

    2.函数调用

     3.代码实现删除函数

    1. STU_NODE *deleteLink(STU_NODE *head,int num){
    2. //判断链表这个结点为不为空
    3. if(nullptr == head){ //不存在
    4. cout<<"Link is not exist"<
    5. return nullptr;
    6. }
    7. //逐个节点比较,寻找删除点
    8. STU_NODE *pf=head, *pb = head;
    9. while((pb->num != num) && (pb->next != nullptr)){
    10. pf = pb;
    11. pb = pb->next;
    12. }
    13. //找到删除点
    14. if(pb->num == num){
    15. if(pb == head) //头结点删除
    16. {
    17. head = head->next;
    18. }else{//中尾部删除
    19. pf->next = pb->next;
    20. }
    21. delete pb;
    22. }else{
    23. cout<<"未找到要删除的节点:"<
    24. }
    25. return head;
    26. }

    4.结果展示

     

    4.释放整个链表

    1.函数调用

    2.释放链表的函数实现

    1. STU_NODE *freeLink(STU_NODE *head)
    2. {
    3. //判断链表这个结点为不为空
    4. if(nullptr == head){ //不存在
    5. cout<<"Link is not exist"<
    6. return nullptr;
    7. }
    8. //逐个节点遍历删除
    9. STU_NODE *pb = head;
    10. while (pb != nullptr) {
    11. head = head->next;
    12. delete pb;
    13. pb = head;
    14. }
    15. return head;
    16. }

     3.结果展示

     5.main函数最终所有代码

    1. #include
    2. #include "link.h"
    3. #include
    4. using namespace std;
    5. STU_NODE *head = nullptr;
    6. int main()
    7. {
    8. helpMessage();
    9. while(1){
    10. char cmd[64] = "";
    11. cout<<"请输入操作指令: ";
    12. cin >> cmd;
    13. if(strcmp(cmd,"help") == 0){
    14. helpMessage();
    15. }else if(strcmp(cmd,"insert") == 0){
    16. cout << "-------insert-------"<
    17. cout<<"请输入要插入的节点信息(num name):";
    18. STU_NODE tmp;
    19. cin>>tmp.num>>tmp.name;
    20. //往哪个链表插,此时需要一个指向链表的头结点指针
    21. head = insertLink(head,tmp);
    22. }else if(strcmp(cmd,"print") == 0){
    23. //遍历链表
    24. printLink(head);
    25. }else if(strcmp(cmd,"search") == 0){
    26. cout << "-------search-------"<
    27. cout<<"请输入查询的姓名:";
    28. char name[32]="";
    29. cin>>name;
    30. STU_NODE *ret = nullptr;
    31. ret = searchLink(head,name);
    32. if(ret != nullptr){
    33. cout<<"查询的结构:num="<num<<", name="<name<
    34. }
    35. }else if(strcmp(cmd,"delete") == 0){
    36. cout << "-------delete-------"<
    37. cout << "请输入要删除的学号num: ";
    38. int num = 0;
    39. cin>>num;
    40. head = deleteLink(head,num);
    41. }else if(strcmp(cmd,"free") == 0){
    42. cout << "-------free-------"<
    43. head = freeLink(head);
    44. }else if(strcmp(cmd,"clear") == 0){
    45. system("cls");
    46. }else if(strcmp(cmd,"quit") == 0){
    47. head = freeLink(head);
    48. return 0;
    49. }
    50. }
    51. return 0;
    52. }

  • 相关阅读:
    Python和Pandas对事件数据的处理:以电动汽车充电数据为例
    Python移除指定文件夹中所有文件名称中的特殊字符(数字、特殊字符、空格等)、只保留字母字符
    centos7安装部署kvm,照做就行
    【精选】发布应用到应用商店的基本介绍
    本周内容整理
    基于SSM的医院科室人员管理系统
    为什么国家政府发的国债,被央行自己印的钱大量购买时,利率会降低呢?
    Vue基础(干货+代码)
    wind版本elasticdump执行报错 unexpected token ‘ in json at
    docker基础命令
  • 原文地址:https://blog.csdn.net/Phofomy/article/details/134507175
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号