【STL_ LIST】 STL | LIST 双向链表 |常用操作

一, STL大纲

首先我们知道 STL 的设置的初衷,当我们程序猿在实现一些程序的时候,我们可能会重复的使用到一些数据结构,还有算法,我们所要说的stl就是被使用很多次的数据结构,我们把他分装到STL中,然后调用,这会使我们能更方便的来完成数据结构的实现,以及程序的设计

常见的STL容器有:

LIST 双链表 , VECTOR 动态数组 ,QUEUE 队列 ,STACK 栈。。。

二,LIST 双链表容器

1, 数据结构的存储结构

双链表容器,存储的方式就是类似双链表的存储,使用的时候就把这个链表结构当成常用的链表使用就行,
在这里插入图片描述

2,lIst 的使用

1,链表的创建

创建一个空表 : list <数据结构> 变量名称
创建一个常数链表 :list <> name( 几个 ,常数值) ;
创建一个导其他类型的数据结构

链表: list <> na (na2)
其他使用迭代器导入

//数组迭代器
#include <iostream>
#include <list>
using namespace std ;
int main () 
{
    
     int q[10] = {
    
    1,2,3,45,6,7,8,9,3} ;
    list <int> sq(q , q + 10) ; 
    
   
    for(int   e  : sq)
    {
    
    
         cout << e << endl ; 
    } 
    return 0 ;
}

2,链表的压入,删除基础操作
∗ ∗ 链表的压入 ∗ ∗ **链表的压入** 链表的压入
头压入 : name.push_front()
尾压入 : name.push_back()

#include <iostream>
#include <list>
using namespace std ;
int main () 
{
    
     int q[10] = {
    
    1,2,3,45,6,7,8,9,3} ;
    list <int> sq(q , q + 10) ; 
    
	sq.push_back(1314);//back
	
	sq.push_front( 34);
  //front  
    for(int   e  : sq)
    {
    
    
         cout << e << endl ; 
    } 
    return 0 ;
}

∗ ∗ 链表的弹出 ∗ ∗ **链表的弹出** 链表的弹出
头弹出 : pop_front ()
尾弹出 : pop_back ()

#include <iostream>
#include <list>
using namespace std ;
int main () 
{
    
     int q[10] = {
    
    1,2,3,45,6,7,8,9,3, 34} ;
    list <int> sq(q , q + 10) ; 
    
	sq.push_back(1314);
	sq.push_front( 34);
	
	sq.pop_back() ;
	sq.pop_front() ;
	sq.pop_back() ;
    for(int   e  : sq)
    {
    
    
         cout << e << endl ; 
    } 
    return 0 ;
}

剩下的操作都需要一个迭代器的操作,接下我们i先补习一下迭代器的操作。

迭代器:
针对list 链表迭代器的实现
常见的 c.begin() ,c.end() 一个头节点,一个尾结点
——————————————————————————————————————
中间迭代器的查找操作 :
使用迭代器遍历存储 list < > :: iterator
寻找地址: 使用ffind 函数 ( 前结点, 后结点 ,值)

∗ ∗ 链表的插入 ∗ ∗ **链表的插入** 链表的插入

#include <iostream>
#include <list>
#include <bits/stdc++.h>
using namespace std ;
int main () 
{
    
     int q[10] = {
    
    1,2,3,45,6,7,8,9,3, 34} ;
   list <int> sq(q , q + 10) ; 
   
   sq.push_back(1314);
   sq.push_front( 34);
   
   sq.pop_back() ;
   sq.pop_front() ;
   sq.pop_back() ;
   list<int> :: iterator pos  = find(sq.begin() , sq.end() , 2) ; 
   //指针的存储  iterator  
	sq.insert(pos, 2324) ;
	//压入操作 
   for(int   e  : sq)
   {
    
    
        cout << e << endl ; 
   } 
   return 0 ;
}

∗ ∗ 链表的删除 ∗ ∗ **链表的删除** 链表的删除

#include <iostream>
#include <list>
#include <bits/stdc++.h>
using namespace std ;
int main () 
{
    
     int q[10] = {
    
    1,2,3,45,6,7,8,9,3, 34} ;
    list <int> sq(q , q + 10) ; 
    
	sq.push_back(1314);
	sq.push_front( 34);
	
	sq.pop_back() ;
	sq.pop_front() ;
	sq.pop_back() ;
	list<int> :: iterator pos  = find(sq.begin() , sq.end() , 2) ; 
 	sq.insert(pos, 2324) ;
 	sq.erase(pos) ;
    for(int   e  : sq)
    {
    
    
         cout << e << endl ; 
    } 
    return 0 ;
}

扩展
STL迭代器的一些想法和理解 首先来说迭代器是这个值的内存地址,在数据结构中我们锁定的就是这个结点,不是这个结点所在的位置 。

∗ ∗ 链表数据的获取 ∗ ∗ **链表数据的获取** 链表数据的获取
首先获取数据的时候,头部的获取:front() 尾部的获取 back()
在这里插入图片描述

3,常用的经典操作

链表的大小

cout << sq.size() << endl ; 

在这里插入图片描述

和sort() 函数的使用

lt.sort() 

在这里插入图片描述

删除指定元素 remove()

lt.remove() 

在这里插入图片描述

3,链表的遍历

#include <iostream>
#include <list>
using namespace std ;
int main () 
{
    
    
    int q[10] = {
    
     32,34,3,534,5,4,65,4,65,6} ; 
    list <int> li(q, q +  9) ; 
    for( auto  e : li)
        cout << e << endl ;
    return 0 ;
}

这种遍历方式是几个数据结构特有的

猜你喜欢

转载自blog.csdn.net/wen030803/article/details/131959098