Uno, la cola
La estructura de datos de la cola se ha mencionado en nuestra cola escrita a mano. La cola es una estructura de datos simple. En primer lugar, podemos saber que la cola es un tipo de operación con dos operaciones, y almacenamos relaciones relacionadas . Luego, para completar esta operación básica de entrada y salida, podemos transformar esta estructura de datos en una estructura de datos de doble puntero.Establecemos un puntero en el nodo principal y el nodo final respectivamente para completar esta estructura de datos.
Para una mirada más profunda, puede ver la sección de cola manuscrita
Segundo, la realización del stl de la cola.
1, la creación de la cola
queue <type> name ;
2, ventana emergente común, push-in, cabeza y cola de la cola
empujar
#include <iostream>
#include <queue>
using namespace std ;
int main ()
{
queue <int> q ;
q.push (100 ) ;
cout << q.front() << endl ;
return 0 ;
}
surgir
q.pop() ;
Volver a la cabeza de la cola
q.front()
//队头
q.back() ;
//队尾
3, operaciones comunes
tamaño de la cola
q.size() ;
Tres, cola de prioridad
1. Cola de prioridad
La cola de prioridad es ante todo una estructura de datos implementada al cambiar la estructura de datos del montón. En esencia, la cola de prioridad es una estructura de datos con un concepto de valor. Primero, podemos escribir el peso por nosotros mismos para completar la cola. Clasificar. La escritura del valor de peso completo requiere la implementación de una biblioteca funcional especial priority_queue < type> , la cola de prioridad se genera de acuerdo con la relación de valor de peso completo y el almacenamiento dinámico máximo se genera de forma predeterminada.
El rendimiento de esta prioridad es dar salida primero a la prioridad más alta, salida de mayor a menor
2, la creación de la cola de prioridad
priority_queue <type , 容器 , 权值> name
- Cree una cola de prioridad predeterminada (los valores más grandes salen primero)
priority_queue <type > name ;
- Cree rápidamente una cola de prioridad anti-predeterminada (la que tiene el valor más pequeño sale primero)
priority_queue <int , vector<int> ,greater<int> >
- Crear secuencias personalizadas
En nuestra secuencia de definición, la relación verdadero-falso devuelta debe ser lo contrario de lo que expresamos, como A<B, cuando juzgamos verdadero y falso, debemos darle falso. De hecho, esto se debe a que la prioridad en la
matriz es relativamente grande Los siguientes elementos también son
cómo se crea b:
Construcción de estructura de estructura de manera funcional.
funcional
#include <iostream>
#include <queue>
#include <functional>
using namespace std ;
bool cmp(int a ,int b )
{
return a > b ;
}
int main ()
{
priority_queue <int , vector<int> ,function<bool(int ,int)>> qu(cmp) ;
qu.push (34);
qu.push (345);
qu.push(354);
while ( qu.size() )
{
cout << qu.top() << endl ;
qu.pop() ;
}
return 0 ;
}
el complejo de construcción de estructuras
ya no se muestra
3. El funcionamiento básico de la cola de prioridad
agregar función, eliminar función
//压入队头
q.push() ;
//弹出队尾
q.pop() ;
cola emergente
q.top() ;
4, función básica
Devuelve el tamaño de la cola de prioridad
cout << q.size() << endl ;
**Proceso de implementación simple**
#include <iostream>
#include <queue>
#include <functional>
#include <vector>
using namespace std ;
bool cmp(pair<int, int > a, pair<int, int > b)
{
if( a.first != b.first)
return a.first < b.first ;
return a.second > b.second ;
}
int main ()
{
int n ;
int j = 1 ;
cin >> n ;
//输出最大的元素 ,当有多个的时候输出下标最小的
priority_queue <pair<int,int> ,vector<pair<int,int> > ,function<bool(pair<int,int> ,pair<int,int>)> >q(cmp);
for(j = 1 ; j <= n ; j ++ )
{
int x ;
cin >> x ;
q.push({
x , j});
}
for(int i = 1 ; i <= n ; i ++ )
{
auto t = q.top() ;
cout << t.second << endl ;
q.pop() ;
}
return 0 ;
}