Cola de prioridad de listas en C++ con ejemplos

cola de prioridad

Las colas de prioridad son un tipo de adaptadores de contenedores, diseñados específicamente de modo que el primer elemento de la cola es el mayor de todos los elementos de la cola y los elementos están en orden no creciente (por lo tanto, podemos ver que cada elemento de la cola tiene una prioridad {fija ordenar}).

Funciones utilizadas con Priority Queue:

  • vacío(): esta función devuelve si la cola está vacía.
  • size(): Esta función devuelve el tamaño de la cola.
  • top(): Devuelve una referencia al elemento superior de la cola.
  • push(x): Esta función agrega el elemento ‘x’ al final de la cola.

Liza

Las listas son contenedores de secuencias que permiten la asignación de memoria no contigua. En comparación con el vector, la lista tiene un recorrido lento, pero una vez que se ha encontrado una posición, la inserción y la eliminación son rápidas. Normalmente, cuando decimos una Lista, hablamos de una lista doblemente enlazada. Para implementar una lista de enlace simple, usamos una lista de reenvío.

Funciones utilizadas con Listas:

  • push_front(x): Agrega un nuevo elemento ‘x’ al principio de la lista.
  • push_back(x): Agrega un nuevo elemento ‘x’ al final de la lista.

Listas de reenvío

La lista de reenvío en STL implementa una lista enlazada individualmente. Introducidas desde C++ 11, las listas de reenvío son más útiles que otros contenedores en las operaciones de inserción, eliminación y movimiento (como ordenar) y permiten la inserción y eliminación constante de elementos en el tiempo. la listala la la la dela una al revés
la la

Funciones utilizadas con la lista de reenvío:

  • push_front(x): Agrega un nuevo elemento ‘x’ al principio de la lista.

Este artículo se centra en cómo se puede usar la cola de prioridad de la lista de reenvío y la lista en C++. La cola de prioridad de listas y listas de reenvío puede ser bastante útil al diseñar estructuras de datos complejas.

A continuación se muestra la implementación de la cola de prioridad de la lista de reenvío:

C++

// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to print priority queue
// contents. Deliberately passing it
// call by value since we don't want
// to remove elements from the priority
// queue
void print(priority_queue<forward_list<int> > priorityQueue)
{
    while (!priorityQueue.empty()) {
        // Each element of the priority
        // queue is a forward list itself
        forward_list<int> st = priorityQueue.top();
  
        cout << "[ ";
  
        // Print the forward list elements
        for (auto element : st)
            cout << element << ' ';
        cout << ']';
        cout << '\n';
  
        // Pop out the topmost forward
        // list
        priorityQueue.pop();
    }
}
  
// Driver code
int main()
{
    // Declaring a priority queue of
    // forward list
    priority_queue<forward_list<int> > priorityQueue;
  
    // Declaring a forward list
    forward_list<int> forwardList1;
  
    // Inserting into the forward list
    forwardList1.push_front(2);
    forwardList1.push_front(4);
    forwardList1.push_front(6);
  
    // Inserting the forward list into
    // the priority queue
    priorityQueue.push(forwardList1);
  
    // Declaring another forward list
    forward_list<int> forwardList2;
  
    // Inserting into the forward list
    forwardList2.push_front(1);
    forwardList2.push_front(3);
    forwardList2.push_front(7);
  
    // Inserting the forward list into
    // the priority queue
    priorityQueue.push(forwardList2);
  
    // Declaring another forward list
    forward_list<int> forwardList3;
  
    // Inserting into the forward list
    forwardList3.push_front(11);
    forwardList3.push_front(22);
    forwardList3.push_front(33);
  
    // Inserting the forward list into
    // the priority queue
    priorityQueue.push(forwardList3);
  
    // Calling print function
    print(priorityQueue);
  
    return 0;
}
Producción

[ 33 22 11 ]
[ 7 3 1 ]
[ 6 4 2 ]

A continuación se muestra la implementación de la cola de prioridad de listas:

C++

// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to print priority queue
// contents. Deliberately passing it
// call by value since we don't want
// to remove elements from the priority
// queue
void print(priority_queue<list<int> > priorityQueue)
{
    while (!priorityQueue.empty()) {
        // Each element of the priority
        // queue is a list itself
        list<int> st = priorityQueue.top();
  
        cout << "[ ";
  
        // Print the list elements
        for (auto element : st)
            cout << element << ' ';
  
        cout << ']';
        cout << '\n';
  
        // Pop out the topmost list
        priorityQueue.pop();
    }
}
  
// Driver code
int main()
{
    // Declaring a priority queue of
    // lists
    priority_queue<list<int> > priorityQueue;
  
    // Declaring a list
    list<int> list1;
  
    // Inserting into the list
    // Pushing at the front in the
    list1.push_front(2);
  
    // Pushing at the back in the
    // list
    list1.push_back(4);
    list1.push_back(6);
  
    // Inserting the list into the
    // priority queue
    priorityQueue.push(list1);
  
    // Declaring another list
    list<int> list2;
  
    // Inserting into the list
    // Pushing at the front in the
    list2.push_front(2);
  
    // Pushing at the back in the
    // list
    list2.push_back(4);
    list2.push_back(7);
  
    // Inserting the list into the
    // priority queue
    priorityQueue.push(list2);
  
    // Declaring another list
    list<int> list3;
  
    // Inserting into the list
  
    // Pushing at the front in the
    list3.push_front(11);
  
    // Pushing at the back in the
    // list
    list3.push_back(22);
    list3.push_back(33);
  
    // Inserting the list into the
    // priority queue
    priorityQueue.push(list3);
  
    // Calling print function
    print(priorityQueue);
  
    return 0;
}
Producción

[ 11 22 33 ]
[ 2 4 7 ]
[ 2 4 6 ]

Por defecto, la cola de prioridad es un montón máximo, por lo tanto, internamente para dos listas/listas de reenvío dentro de la cola de prioridad, la lista/lista de reenvío que tiene el primer elemento mayor es el elemento superior. Si el primer elemento es igual, se compara el segundo valor de la lista/lista de reenvío y así sucesivamente.

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *