码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 23..【摆脱list链表的束缚、让你爱上链表】


    list链表操作

    • (一)、定义及其初始化
      • 1.list 和vector的区别
      • 2.【list链表初始化】
      • 3.【设定空间初始化】
      • 4.动态链表赋值动态链表】
      • 5.【利用迭代器复制动态链表】
      • 6.【普通数组复制给链表】
          • 6.1代码展示:
          • 6.2效果展示:
    • (二)、list的基本属性
      • 1.【链表的长度】
      • 2.【链表的清空操作】
      • 3.【判断链表是否为空】
      • 4.【获取链表第一个元素】
      • 5.【获取链表最后一个元素】
      • 6.【链表与链表的交换】
      • 7.【链表的排序】
      • 8.实战项目
          • 8.1代码展示:
          • 8.2效果展示:
    • (三)、list链表的应用
      • 1.【头部插入一个数据】
      • 2.【尾部插入一个数据】
      • 3.【多元插入数据】
      • 4.【多元插入数据2】
      • 5.【利用迭代器插入】
      • 6.【删除头一个元素】
      • 7.【删除最后一个元素】
      • 8.【多元删除数据】
      • 9.【链表遍历只能是迭代器遍历】
      • 10.实战项目
          • 代码展示:
          • 效果展示:
    • (四)、实战操作:
      • 1.代码展示:
      • 2.项目效果

    (一)、定义及其初始化

    在这里插入图片描述

    1.list 和vector的区别

    链表相比于vector,优点在于方便插入和删除,缺点是随机访问比较慢。

    2.【list链表初始化】

    list<数据类型> 函数名;

    3.【设定空间初始化】

    list<数据类型> 函数名(a,b); 设定a个空间,元素为b.

    4.动态链表赋值动态链表】

    list<数据类型>函数名1(函数名2); 把动态链表2复制给动态链表1

    5.【利用迭代器复制动态链表】

    list<数据类型>函数名1(函数名2.begin(),函数名2.end()); 动态链表二复制给动态链表1

    6.【普通数组复制给链表】

    list<数据类型>函数名1(函数名2,sizeof(函数名2)/sizeof(int));

    6.1代码展示:

    #include 
    using namespace std;
    int main()
    {
        list<int> list_a;       //初始化为0
        list<int> list_b(4,88);      //开辟四个空间,且每个元素都为88;
        list<int> list_c(list_b);     // 动态链表复制给动态链表
        list<int> list_d(list_b.begin(), list_b.end());       //利用迭代器的方法
        int s[] = { 2,5,8 };
        list<int> list_e(s, s + sizeof(s)/sizeof(int));       //普通数组复制给链表
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    6.2效果展示:

    在这里插入图片描述
    在这里插入图片描述

    (二)、list的基本属性

    在这里插入图片描述

    1.【链表的长度】

    函数名.size()

    2.【链表的清空操作】

    函数名.clear()

    3.【判断链表是否为空】

    函数名.empty()

    4.【获取链表第一个元素】

    函数名.front()

    5.【获取链表最后一个元素】

    函数名.back()

    6.【链表与链表的交换】

    函数名.swap()

    7.【链表的排序】

    函数名.sort() 默认升序

    8.实战项目

    在这里插入图片描述

    8.1代码展示:

    #include 
    
    using namespace std;
    
    int main()
    
    {
     list<int> list_a; //初始化为0
    
     int s[4] = { 2,5,8 };
    
     list<int> list_b(s, s + sizeof(s)/sizeof(int)); //普通数组复制给链表
    
     int size;
    
     size = list_a.size(); //链表长度
    
     bool is_list = list_a.empty(); //链表是否为i空
    
     list_b.push_front(1); //在头部插入
    
     list_b.push_back(2); //在尾部插入
    
     int a=list_b.front(); //获取第一个
    
     int b=list_b.back(); //获取最后一个
    
     // list_b.clear();
    
     list_a.swap(list_b);
    
     list_a.sort(); // 对链表进行排序,默认升序
    
     return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    8.2效果展示:

    在这里插入图片描述

    (三)、list链表的应用

    在这里插入图片描述

    1.【头部插入一个数据】

    函数名.push_front()

    2.【尾部插入一个数据】

    函数名.push_back()

    3.【多元插入数据】

    函数名.insert(函数名.begin(),n) 从哪开始 插入谁

    4.【多元插入数据2】

    函数名.insert(函数名.begin(),n,m) 从哪开始 插入几个 插入谁

    5.【利用迭代器插入】

    iist〈函数类型〉 ::iterator 对象名;

    对象名=函数名.begin();

    函数名.insert(对象名,个数,元素)

    6.【删除头一个元素】

    函数名.pop_front()

    7.【删除最后一个元素】

    函数名.pop_back()

    8.【多元删除数据】

    函数名1.erase(函数名1.begin(),函数名1.end()

    9.【链表遍历只能是迭代器遍历】

    iist〈函数类型〉 ::iterator  对象名;
    
    for(对象名=函数名.begin();对象名!=end();对象名++)
    
    {
      cout<<*对象名;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    10.实战项目

    在这里插入图片描述

    代码展示:

    #include 
    
    #include 
    
    using namespace std;
    
    int main()
    
    {
     list<int> list_a; //初始化为0
    
     int s[4] = { 2,5,8 };
    
     list<int> list_b(s, s + sizeof(s)/sizeof(int)); //普通数组复制给链表
    
     list_b.push_front(1); //在头部插入
    
     list_b.push_back(2); //在尾部插入
    
     list_b.insert(list_b.begin(), 66); // 从哪插入, 插入什么
    
     list_b.insert(list_b.end(), 88);           
    
     list_b.insert(list_b.end(),3, 100); // 从哪插入, 插入几个,插入谁
    
     
    
     list<int>::iterator it; //利用迭代器锦新插入
    
     it = list_b.begin();
    
     it++;
    
     list_b.insert(it, 5, 111);
    
     
    
     list_b.insert(list_b.begin(), s, s + sizeof(s) / sizeof(int)); //插入普通数组
    
     
    
     list_b.pop_front(); //删除头部一个
    
     list_b.pop_back(); //删除尾部一个
    
     
    
     //list_b.erase(list_b.begin(), list_b.end()); // 从头到位删除
    
     
    
     list<int>::iterator itor;
    
     for (itor = list_b.begin(); itor!= list_b.end(); itor++)
    
     {
      cout << *itor << " ";
    
     }
    
     return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    效果展示:

    在这里插入图片描述
    在这里插入图片描述

    (四)、实战操作:

    在这里插入图片描述

    在这里插入图片描述

    1.代码展示:

    【切记呀,在list链表中只能用迭代器进行操作,而且也不能在删除的过程中使用+的符号】

    #include 
    #include 
    using namespace std;
    int main()
    {
        int i = 0;
        list<int> list_a(13);
        list<int>::iterator it;
        for (it=list_a.begin();it!=list_a.end();it++)
        {
            i++;
            cout << "请输入第"<< i<< "个数据" << endl;
            cin >> *it;
        }
        for (it = list_a.begin(); it != list_a.end(); it++)
        {
            int j = 0;
            if (*it == 3)
            {
                list_a.erase(it, it);
            }
            else
            {
                cout << *it << " ";
            }
        }
        return 0;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2.项目效果

    在这里插入图片描述
    在这里插入图片描述
    制作不易,还请多多指教…

  • 相关阅读:
    微信小程序如何分包管理
    【数据结构初阶-oj】入门二叉树的入门oj
    spug-机器管理平台
    【OS Ctags】Vim 代码阅读工具 Ctags
    一个简单的HTML网页——传统节日春节网页(HTML+CSS)
    [JMeter]maven利用jmeter-maven-plugin插件管理jmx脚本
    PT_正态总体的抽样分布
    深度学习 图像分割 PSPNet 论文复现(训练 测试 可视化)
    GBASE 8A v953报错集锦55--Load data 数据中含有 longtext 报内存不足
    【Linux:环境变量】
  • 原文地址:https://blog.csdn.net/qq_69683957/article/details/126304511
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号