提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 引言
  • 本章概括
  • 1.4.1 list
    • 1.介绍
    • 2.概念
    • 3.常见操作
    • 4.代码讲解
      • 运用
  • 1.4.2例题

引言

本小节我们来学习链表list相关知识点,以下是我的学习笔记,供给大家参考。

本章概括

第一章 STL和基本数据结构

章节 内容
1.1 容器 vector
1.2 队列 queue
1.3 栈 stack
1.4 链表 list
1.5 set
1.6 map

1.4.1 list

1.介绍

  • STL的list是数据结构的双向链表,它的内存空间可以是不连续的,通过指针来进行数据的访问,它可以高效率地在任意地方删除和插入,插入和删除操作是常数时间的。
  • list和vector的优缺点正好相反,它们的应用场景不同。
    (1)vector:插入和删除操作少,随机访问元素频率。
    (2)list:插入和删除频繁,随机访问较少。

2.概念

  • 链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域。

1.链表内存是不连续的,添加元素和删除元素,它的时间复杂度都是常数项,不需要移动元素,比数组添加删除元素效率更高;
2.链表只有在需要的时候才分配内存。
3.链表需要额外的空间保存结点(前驱和后继)关系。

3.常见操作

功能 例子 说明
定义 list< int >a 定义一个int类型的链表
在尾部插入元素 a.push_back(x) 在容器尾部插入一个元素
删除最后一个元素 a.pop_back() 删除容器中最后一个元素
在开头插入一个元素 a.push_front(x) 在容器开头插入一个元素
删除开头的元素 a.pop_front() 删除开头的元素
尾部插入 a.push_back(i); 在尾部插入i
删除尾部 a.pop_back(); 删除尾部元素
插入 a.insert(pos,n,elem) 在pos位置插入n个elem元素
插入 a.insert(pos,beg,end) 在pos位置插入[beg,end)区间的数据,无返回值
清空 a.clear(); 清空所有数据
删除区间 a.erase(beg,end) 删除[beg,end)区间的数据,返回下一个数据的位置
删除指定元素 a.remove(elem) 删除容器中锁头与elem值相匹配的元素
元素个数 a.size() 返回容器中元素的个数
判断是否为空 a.empty() 判断容器是否为空
重置容器大小 a.resize() 重新指定容器长度

4.代码讲解

运用

#include<iostream>
#include<list>
using namespace std;
int main(){//定义:list<int>mlist1;list<int>mlist2(10,7);//定义10个数值为7的链表list<int>mlist3(mlist2);//拷贝mlist2 list<int>mlist4(mlist2.begin(),mlist2.end());//拷贝mlist2 //遍历for(list<int>::iterator it = mlist4.begin();it != mlist4.end();it++)cout<<*it<<" ";cout<<endl; //输出结果为:7 7 7 7 7 7 7 7 7 7 7//插入mlist1.push_back(7);//在容器尾部插入7 mlist1.push_front(77);//在容器开头插入77 mlist1.insert(mlist1.begin(),777);//在容器开头插入777 mlist1.insert(mlist1.end(),7777);//在容器结尾插入7777 list<int>::iterator it = mlist1.begin();it++;it++;mlist1.insert(it,500);//在第二个元素后插入500 for(list<int>::iterator it = mlist1.begin();it != mlist1.end();it++)cout<<*it<<" ";cout<<endl; //遍历容器mlist1//输出结果为 777 77 500 7 7777//删除mlist1.pop_back();//删除结尾元素 mlist1.pop_front();//删除开头元素 for(list<int>::iterator it = mlist1.begin();it != mlist1.end();it++)cout<<*it<<" ";cout<<endl; //遍历容器mlist1//输出结果为77 500 7 mlist1.erase(mlist1.begin(),mlist1.end());//和mlist1.clear()效果一样,都是删除所有元素 return 0;
}

1.4.2例题

  • problem:
    某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。

  • input
    本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。

    例如:
    2
    20
    40

  • output
    共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
    例如:
    1 7 19
    1 19 37

#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(){int t,n;cin>>t;while(t--){cin>>n;int k = 2;list<int>mylist;//创建 list<int>::iterator it;for(int i = 1;i <= k;i++){mylist.push_back(i);//赋值 }while(mylist.size()>3){int num = 1;for(it = mylist.begin();it!=mylist.end();){if(num++ % k == 0)it = mylist.erase(it);elseit++;}k == 2?k=3:k=2;}for(it = mylist.begin();it!=mylist.end();it++){if(it!=mylist.begin())cout<<" ";cout<<*it;}cout<<endl;}return 0;
}

下一节我们将对set进行详解,请大家持续关注

第四节 c++ 数据结构 链表list 用法详解相关推荐

  1. 数据结构——链表(定义详解及建立单链表与实现其操作)

    链表定义:链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...

  2. 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...

    这篇教程是向脚本之家的朋友介绍单反相机中P.A.S.M四种曝光模式的用法,对于摄影爱好者非常值得学习,推荐到脚本之家,喜欢的朋友一起来看看吧 很多朋友在初接触单反相机时对相机的P.A.S.M四种曝光模 ...

  3. java正则表达式判断问号_正则表达式问号的四种用法详解

    原文符号 因为?在正则表达式中有特殊的含义,所以如果想匹配?本身,则需要转义,\? 有无量词 问号可以表示重复前面内容的0次或一次,也就是要么不出现,要么出现一次. 非贪婪匹配 贪婪匹配 在满足匹配时 ...

  4. java list用法_java list的用法详解

    java list的用法详解 java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中.以下是百分网小编搜索整理的关于java list的用法详解,需要的朋友可以参考一下!想了解更多相关 ...

  5. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  6. oracle中取反_oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 更新时间:2013年06月13日 17:42:05   作者: 本篇文章是对oracle正则表达式regexp_like的用法进行了详细的分析介 ...

  7. sizeof,strlen用法详解

    sizeof 前向声明: sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着"辛苦我一个,幸福千万人"的伟大思想,我决定将其尽可能详细的总结一下. 但 ...

  8. 链表c++语言 解析,C++ 单链表的基本操作(详解)

    链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...

  9. HBase数据结构与基本语法详解

    HBase数据结构与基本语法详解.背景: 阅读新闻 [日期:2019-01-06] 来源:Linux社区 作者:Linux [字体:大 中 小] HBase中的表一般有这样的特点: 1 大:一个表可以 ...

最新文章

  1. 电信运营商的云机遇-【软件和信息服务】2015.01
  2. [Usaco2007 Oct] Super Paintball超级弹珠
  3. 7、Reverse Integer(python)
  4. android .so文件详解以及兼容性
  5. 一文看懂WebTransport
  6. 数据结构 二、向量(接口与实现and可扩容向量)
  7. kali使用笔记本自带无线网卡_无线网卡?那是什么?
  8. oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint
  9. Java中Thread类的方法简介
  10. Android学习笔记(三)——Button之圆角、按压效果、点击事件
  11. unity: GetLocalizedString can only be called from the main thread 异常解决
  12. Git安装及基本配置
  13. 如何测试一个数组是否包含指定的值
  14. (ensp)华为USG6000v防火墙简单配置
  15. 高淇python400集课堂笔记_2020六年级上第十七课《古诗三首》手抄笔记及图文讲解...
  16. w ndows10专业版连接不上网,windows10系统电脑插着网线却连不上网如何解决
  17. RocketMQ重试机制(ACK确认机制)
  18. 苹果cms漫画小说模板
  19. 大模型为什么是深度学习的未来?
  20. PMP考纲解读 |【人】任务2—领导团队(三)

热门文章

  1. MYCCL特征码定位器的详细使用
  2. 数据结构教程(第五版 李春葆 上机实验题4 验证性实验)
  3. 编码的奥秘:逻辑门电路
  4. D-HAZY :一个用于定量评估去雾算法的数据集
  5. vue的渲染函数 - render
  6. 获取Excel中Undo按钮的项目
  7. python操作mongodb_python 操作 mongodb
  8. ubuntu系统写路由指令_linux系统下,traceroute路由跟踪指令详解
  9. 3.从零开始搭建基于SpringCloud的京东整站_文件上传微服务
  10. js - WebSocket应用小案例