[STL_ LIST] STL | LIST lista doblemente enlazada | operaciones comunes

Uno, esquema STL

En primer lugar, sabemos la intención original de la configuración STL . Cuando los programadores implementamos algunos programas, podemos usar repetidamente algunas estructuras de datos y algoritmos. El stl que queremos decir es la estructura de datos que se usa muchas veces. Empaquetamos en STL , y luego llamarlo, lo que nos facilitará completar la realización de la estructura de datos y el diseño del programa.

Los contenedores STL comunes son:

LIST lista de doble enlace, matriz dinámica VECTOR, cola QUEUE, pila STACK. . .

Dos, LIST contenedor de lista de doble enlace

1. La estructura de almacenamiento de la estructura de datos.

El método de almacenamiento del contenedor de lista de enlaces dobles es similar al de la lista de enlaces dobles. Cuando lo use, simplemente use esta estructura de lista enlazada como una lista enlazada de uso común.
inserte la descripción de la imagen aquí

2. Uso de la lista

1, la creación de lista enlazada

Crear una lista vacía: lista <estructura de datos> nombre de variable
Crear una lista enlazada constante: lista <> nombre (varios, valor constante);
crear una estructura de datos que importe otros tipos

Lista enlazada: lista <> na (na2)
otras importaciones usando iteradores

//数组迭代器
#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, Empujando la lista enlazada, borrando operaciones básicas
∗ ∗ Empujando la lista enlazada∗ ∗ **Empujando la lista enlazada**Empuje de lista enlazada
Empuje de cabeza: nombre.push_front()
Empuje de cola: nombre.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 ;
}

∗ ∗ ventana emergente de lista enlazada∗ ∗ **ventana emergente de lista enlazada**pop de lista enlazada
Pop de cabeza: pop_front ()
Pop de cola: 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 ;
}

El resto de las operaciones requieren la operación de un iterador, así que echemos un vistazo primero a la operación del iterador.

Iterador:
para la implementación del iterador de lista enlazada de lista
Común c.begin(), c.end() Un nodo principal, un nodo final
————————————————————— —————————————————————
Operación de búsqueda del iterador intermedio:
use el iterador para atravesar la lista de almacenamiento < >:: iterador
para encontrar la dirección: use la función ffind ( nodo frontal, reverso punto de nodo, valor)

∗ ∗ Inserción de lista enlazada∗ ∗ **Inserción de lista enlazada**Inserción de lista enlazada

#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 ;
}

∗ ∗ Eliminación de lista enlazada∗ ∗ **Eliminación de lista enlazada**Eliminación de lista enlazada

#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 ;
}

Expansión Algunas ideas y comprensión de los iteradores STL En primer lugar, un iterador es la dirección de memoria de este valor En la estructura de datos, lo que bloqueamos es este nodo, no la ubicación de este nodo
.

∗ ∗ Adquisición de datos de lista enlazada∗ ∗ **Adquisición de datos de lista enlazada**Adquisición de datos de lista enlazada
Al adquirir datos primero, la adquisición de la cabeza: frente() y la adquisición de la cola atrás()
inserte la descripción de la imagen aquí

3, operaciones clásicas de uso común

tamaño de lista enlazada

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

inserte la descripción de la imagen aquí

y uso de la función sort()

lt.sort() 

inserte la descripción de la imagen aquí

Eliminar el elemento especificado remove()

lt.remove() 

inserte la descripción de la imagen aquí

3. Recorriendo la lista enlazada

#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 ;
}

Este método transversal es único para varias estructuras de datos.

Supongo que te gusta

Origin blog.csdn.net/wen030803/article/details/131959098
Recomendado
Clasificación