List是一种双向链表结构,可以从第一个元素开始删除、插入,也可以从最后一个元素删除、插入,下面介绍一下 List 中常用的几个函数;

一、List 中的 begin 和 end 函数 ;

  和其他几种数据结构差不多,都是用来从第一个元素,访问到最后一个元素,返回的是当前指针;

  list<int>  L ;

  *(L.begin())  // 输出第一个元素

  *(L.end())   // 输出最后一个元素的下一个元素

二、List 中的 rbegin 和 rend 函数

  也和其他几种数据结构差不多,从最后一个元素访问到第一个元素; 返回值如果需要存入一个变量中,这个变量应该这样定义

  list<int>::reverse_iterator iter ;

  list<int> L ;

  iter = L.rbegin() ;

  *iter     //  输出最后一个元素

  iter = L.rend() ;

  *iter      // 输出第一个元素前面的一个元素

三、List 中的 empty 函数

  list<int>  L ;

  L.empty() ;  // 如果链表为空则返回 true ,否则返回 false ;

四、List 中的 size 函数

  list<int> L(5 , 10) ;

  L.size() ;   // 返回链表中元素的个数

五、List 中的 front 和 back 函数

  list<int> L(5,10) ;

  L.front() ;    // 返回第一个元素

  L.back() ;      //  返回最后一个元素

六、List 中的 assign 函数

  assign 函数用来对链表对象的重新分配 ;

  list<int> L1 ;

  list<int> L2 ;

  L1.assign(5,10) ;    // 向链表中添加 5 个元素 10 ;

  L1.assign(5,11) ;    // 把原来的 5 个元素 10 改为 11 ;

  L2.assign( L1.begin() , L1.end() ) ;   将L1中的元素复制给L2 ;

  int a[] = {1,2,3,4,5} ;

  L2.assign(a,a+5) ;     // 把数组 a 中的数据复制到 L2 中 ;

七、List 中的 push_front、push_back、pop_front、pop_back 函数

  这几个函数就是双向链表的特殊之处,可以从头插入、删除,也可以从尾部插入和删除

  list<int> L(5,10) ;

  L.push_back(5) ;  // 从最后插入一个元素 5 ;

  L.pop_back() ;    // 删掉最后一个元素

  L.push_front(5) ;  //在第一个元素前面插入一个元素 5 ;

  L.pop_front() ;   // 将第一个元素删除掉

八、List 中的 insert 函数

  insert 函数中的参数可以有两个,也可以由三个,当参数有两个时,第一个代表在某个元素的前面,第二个参数代表要插入的数值;

  当参数有三个时,第一个代表在某个元素之前插入,第二个元素和第三个元素代表要插入的范围;

  list<int> L(5,10) ;

  L.insert(L.begin(),5) ;      //在第一个元素前插入一个元素 5 ;

  L.insert(L.begin(),5,2) ;     // 在第一个元素前插入 5 个元素 2 ;

  int a[] = {8,2,3,4,5} ;    

  L.insert(L.begin(),a,a+5) ;        // 将数组 a 插入到第一个元素之前 ;

九、List 中的 erase 函数

  erase 用来删除链表中的数据元素

  list<int> L(5,10) ;

  L.erase(L.begin()) ;  //删除链表中的第一个元素

  L.erase( L.begin() , L.end() )  // 删除链表中的所有元素,相当于 L.assign(0) ;

十、List 中的 resize 函数

  resize 和 其他数据结构一样,重新分配链表的大小 ;

  list<int> L(5,10) ;

  L.resize(3) ;    // 将链表中原来的 5 个元素,缩短为现在的 3 个元素 ;

  L.resize(8) ;    // 将链表中原来的 3 个元素,扩大为现在的 8 个元素,扩大部分默认赋初值为 0 ;

  L.resize(10,2) ;    // 将链表中原来的 8 个元素,扩大为现在的 10 个元素,扩大部分赋值为 2 ;

十一、List 中的 clear 函数

  list<int> L(5,10) ;

  L.clear() ;      //  清空链表中的所有元素, 相当于L.assign(0) , 还相当于L.erase(L.begin() , L.end()) ;

List(双向链表)的更多相关文章

  1. 学习Redis你必须了解的数据结构——双向链表(JavaScript实现)

    本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/ 下午分享了JavaScript实现单向链表,晚上就来补充下双向链表吧.对链表 ...

  2. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  3. 剑指Offer面试题:25.二叉搜索树与双向链表

    一.题目:二叉搜索树与双向链表 题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.比如输入下图中左边的二叉搜索树,则输出转换之后的 ...

  4. Linux 内核数据结构:Linux 双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  5. Linux 内核数据结构:双向链表

    Linux 内核提供一套双向链表的实现,你可以在 include/linux/list.h 中找到.我们以双向链表着手开始介绍 Linux 内核中的数据结构 ,因为这个是在 Linux 内核中使用最为 ...

  6. 线性表-双向链表(LinkedList)

    双向链表:如图1-3 所示,会把当前header拆分开,重新插入一个Entry<E>. LinkedList源码 0.首先这个类中的两个变量 private transient Entry ...

  7. Shuffling Machine和双向链表

    1. 双向链表 https://github.com/BodhiXing/Data_Structure 2. Shuffling Machine https://pta.patest.cn/pta/t ...

  8. MS - 1 - 把二元查找树转变成排序的双向链表

    ## 1. 把二元查找树转变成排序的双向链表 ## ### 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. ### 要求不能创建任何新的结点,只调整指针的指向. 10       ...

  9. javascript中的链表结构—双向链表

    1.概念 上一个文章里我们已经了解到链表结构,链表的特点是长度不固定,不用担心插入新元素的时候新增位置的问题.插入一个元素的时候,只要找到插入点就可以了,不需要整体移动整个结构. 这里我们了解一下双向 ...

  10. Java自己实现双向链表LinkList

    /** * <p> * Node 双向链表实体类 * <p> * * @author <a href="mailto:yangkj@corp.21cn.com& ...

随机推荐

  1. android服务Service(上)- IntentService

    Android学习笔记(五一):服务Service(上)- IntentService 对于需要长期运行,例如播放音乐.长期和服务器的连接,即使已不是屏幕当前的activity仍需要运行的情况,采用服 ...

  2. Oracle Spatial-元数据及SDO_GEOMETRY

    一.空间表的元数据 将表的SDO_GEOMETRY列的所有对象作为一个空间层.Spatial需要对所有空间对象进行验证.创建索引和查询.此时需要为图层指定适当的元数据,该数据包含如下信息:维度.维度边 ...

  3. python 读取utf8文件

    有时候默认是gbk编码,但是要读取utf8文件,所以会出现decode 错误. 使用codecs模块: import codecs file = codecs.open('filename','r', ...

  4. [LeetCode][Python]Integer to Roman

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/integer ...

  5. 【FZU】2152 文件系统

     Problem 2152 文件系统 Accept: 63    Submit: 126 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  6. android 三级菜单 BaseExpandableListAdapter

    在网上搜了非常长时间.没有找到合适的Android三级菜单.所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完毕相应的菜单项,详细实现请參照下图. wa ...

  7. TabHost 简单用法

    package com.google.tabhost;    import android.app.TabActivity;  import android.os.Bundle;  import an ...

  8. calltree看代码调用图

    calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐  calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境 ...

  9. B - 确定比赛名次

    B - 确定比赛名次 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  10. 容易被误解的overflow:hidden

    http://www.ofcss.com/2011/03/20/misunderstood-of-overflow-hidden.html(转) 容易被误解的overflow:hidden 15条评论 ...