使用STL中的list容器实现单链表的操作

#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
void Print(int &item)
{
  cout<<item<<" ";
}
int main()
{
  list<int> listintegers;
  list<int>::iterator listiter;  //引入迭代器

  //------------头插法插入元素-------------
  listintegers.push_front(5);
  listintegers.push_front(3);
  listintegers.push_front(1);
  listintegers.push_front(2);
  listintegers.push_front(4);

   //----------尾插法插入元素----------
  listintegers.push_back(6);
  listintegers.push_back(8);
  listintegers.push_back(7);

  //--------使用list的成员函数insert()插入元素到链表中
  listintegers.insert(listintegers.end(),10);
  listintegers.insert(listintegers.end(),9);

  //----------利用迭代器输出链表-----------
  /* 我们在每个算法中都使用一个或多个iterator。我们使用它们来存取容器中的对象。
     要存取一个给定的对象,我们把一个iterator指向它,然后间接引用这个iterator    */
  cout<<"链表为:";
  for(listiter=listintegers.begin();listiter!=listintegers.end();listiter++)
  {
   cout<<*listiter<<" ";
  }
  cout<<endl;

  //-------利用STL通用算法for_each()输出链表---------------
  /* Print是个函数,实现对象的输出功能 */
  cout<<"链表为:";
  std::for_each(listintegers.begin(),listintegers.end(),Print);
  cout<<endl;

  //------利用STL通用算法find()判断链表中是否存在某元素----------
  listiter=find(listintegers.begin(),listintegers.end(),6);
  if(listiter==listintegers.end())
  {
    cout<<"6 is not in list"<<endl;
  }
  else
  {
    cout<<"6 is in list"<<endl;
  }

  //-------利用STL通用算法search()判断链表中是否存在某个序列-------

  list<int> targetlist;
  targetlist.push_front(2);
  targetlist.push_front(1);    //定义该序列为12
  listiter=search(listintegers.begin(),listintegers.end(),targetlist.begin(),targetlist.end());
   if(listiter==listintegers.end())
  {
    cout<<"序列12 is not in list"<<endl;
  }
  else
  {
    cout<<"序列12 is in list"<<endl;
  }

  //使用list的成员函数sort()对链表进行排序
   cout<<"排序后,链表为:";
   listintegers.sort();
   for(listiter=listintegers.begin();listiter!=listintegers.end();listiter++)
  {
   cout<<*listiter<<" ";
  }
  cout<<endl;

  //使用list的成员函数remove()删除链表元素
  listintegers.remove(8);
   cout<<"删除8后,链表为:";
   for(listiter=listintegers.begin();listiter!=listintegers.end();listiter++)
  {
   cout<<*listiter<<" ";
  }
  cout<<endl;

  //----------使用list成员函数pop_front删除链首元素----------
  listintegers.pop_front();
  cout<<"删除链首元素后,链表为:";
   for(listiter=listintegers.begin();listiter!=listintegers.end();listiter++)
  {
   cout<<*listiter<<" ";
  }
  cout<<endl;

  //----------使用list成员函数pop_back删除链尾元素----------
   listintegers.pop_back();
  cout<<"删除链尾元素后,链表为:";
   for(listiter=listintegers.begin();listiter!=listintegers.end();listiter++)
  {
   cout<<*listiter<<" ";
  }
  cout<<endl;

  system("pause");
  return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 17:43:47

使用STL中的list容器实现单链表的操作的相关文章

STL中的set容器的一点总结2

http://blog.csdn.net/sunshinewave/article/details/8068326 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.

【转】 STL中的set容器的一点总结

1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关联式容器.set作为一个容器也是

STL中的set容器的一点总结(转)

STL中的set容器的一点总结 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入.排序.删除.查找等.让用户在STL使用过程中,并不会感到陌生. 关于set,必须说明的是set关

stl中顺序性容器,关联容器两者粗略解释

什么是容器 首先,我们必须理解一下什么是容器,在C++ 中容器被定义为:在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器.很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种"对象"还包含了一系列处理"其它对象"的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了一个好处,就是"容器类是一种对特定代码重用问题的良好的解决方案". 容器还有另一个特点是容器可以自行扩展.在解决问题时

Docker中的Redis容器如何连接上进行操作?

Docker中的Redis容器如何连接上进行操作? 1.登录putty有如下信息: 公用虚拟 IP (VIP)地址42.159.156.115内部 IP 地址10.205.178.22IP address for eth0:    10.205.178.22IP address for docker0: 172.17.42.1 2. 下载 http://download.redis.io/redis-stable/redis.conf修改如下字段 # requirepass foobared去掉

java数据结构:单链表常见操作代码实现

一.概述: 本文主要总结单链表常见操作的实现,包括链表结点添加.删除:链表正向遍历和反向遍历.链表排序.判断链表是否有环.是否相交.获取某一结点等. 二.概念: 链表: 一种重要的数据结构,HashMap等集合的底层结构都是链表结构.链表以结点作为存储单元,这些存储单元可以是不连续的.每个结点由两部分组成:存储的数值+前序结点和后序结点的指针.即有前序结点的指针又有后序结点的指针的链表称为双向链表,只包含后续指针的链表为单链表,本文总结的均为单链表的操作. 单链表结构: Java中单链表采用No

基于单链表的操作

单链表 功能设计 1从首元结点开始输出数据域即p->data直到p->next=NULL.typedef struct Node 定义一个链式存储的单链表Node *为结构体指针类型例如对于单链表Lp=L-〉next通过p->data 访问该元素的数据值. 2creatlist(linklist *H) 从空表开始每次读入数据生成新结点将读入的数据存放到新结点的数据域中然后将新结点插入到当前链表的表头结点之后直至读入结束位置为止. 3Leng(linklist *H ) 在单链表中整个链

【复习数据结构】单链表的操作

#include <stdio.h> #include <malloc.h> typedef char ElemType; typedef struct LNode{ //定义单链表结点类型 ElemType data; //数据域 struct LNode *next; //指针域 }LNode,*LinkList; /** * 头插法初始化链表 **/ LinkList CreateListhead(void){ char ch; LinkList L; //初始化链表 LNo

单链表的操作和指针函数基础

/* ============================================================================ Name : TestLinkedList.c Author : lf Version : Copyright : Your copyright notice Description : 1 单链表的增删改查等操作 2 指针函数的使用.如示例中的:void (*visit)(link) ==========================