Cola de prioridad usando array en C++

Priority Queue es una extensión de la estructura de datos Queue donde cada elemento tiene una prioridad particular asociada. Se basa en el valor de prioridad, los elementos de la cola se eliminan.

Operaciones en cola de prioridad:

  • enqueue(): esta función se utiliza para insertar nuevos datos en la cola.
  • dequeue(): esta función elimina el elemento con la prioridad más alta de la cola.
  • peek()/top(): esta función se usa para obtener el elemento de mayor prioridad en la cola sin eliminarlo de la cola.

Enfoque: la idea es crear una estructura para almacenar el valor y la prioridad del elemento y luego crear una array de esa estructura para almacenar elementos. A continuación se detallan las funcionalidades que se van a implementar:

  • enqueue(): Se utiliza para insertar el elemento al final de la cola.
  • ojeada():
    • Recorra la cola de prioridad y encuentre el elemento con la prioridad más alta y devuelva su índice.
    • En el caso de múltiples elementos con la misma prioridad, busque el elemento con el valor más alto que tenga la prioridad más alta.
  • sacar de la cola():
    • Encuentre el índice con la prioridad más alta usando la función peek() . Llamemos a esa posición como ind , y luego cambie la posición de todos los elementos después de la posición ind una posición a la izquierda.
    • Disminuya el tamaño en uno.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Structure for the elements in the
// priority queue
struct item {
    int value;
    int priority;
};
 
// Store the element of a priority queue
item pr[100000];
 
// Pointer to the last index
int size = -1;
 
// Function to insert a new element
// into priority queue
void enqueue(int value, int priority)
{
    // Increase the size
    size++;
 
    // Insert the element
    pr[size].value = value;
    pr[size].priority = priority;
}
 
// Function to check the top element
int peek()
{
    int highestPriority = INT_MIN;
    int ind = -1;
 
    // Check for the element with
    // highest priority
    for (int i = 0; i <= size; i++) {
 
        // If priority is same choose
        // the element with the
        // highest value
        if (highestPriority
                == pr[i].priority
            && ind > -1
            && pr[ind].value
                   < pr[i].value) {
            highestPriority = pr[i].priority;
            ind = i;
        }
        else if (highestPriority
                 < pr[i].priority) {
            highestPriority = pr[i].priority;
            ind = i;
        }
    }
 
    // Return position of the element
    return ind;
}
 
// Function to remove the element with
// the highest priority
void dequeue()
{
    // Find the position of the element
    // with highest priority
    int ind = peek();
 
    // Shift the element one index before
    // from the position of the element
    // with highest priority is found
    for (int i = ind; i < size; i++) {
        pr[i] = pr[i + 1];
    }
 
    // Decrease the size of the
    // priority queue by one
    size--;
}
 
// Driver Code
int main()
{
    // Function Call to insert elements
    // as per the priority
    enqueue(10, 2);
    enqueue(14, 4);
    enqueue(16, 4);
    enqueue(12, 3);
 
    // Stores the top element
    // at the moment
    int ind = peek();
 
    cout << pr[ind].value << endl;
 
    // Dequeue the top element
    dequeue();
 
    // Check the top element
    ind = peek();
    cout << pr[ind].value << endl;
   
      // Dequeue the top element
    dequeue();
   
      // Check the top element
    ind = peek();
    cout << pr[ind].value << endl;
 
    return 0;
}
Producción

16
14
12

Análisis de Complejidad:

  • poner en cola(): O(1)
  • mirar(): O (N)
  • sacar de la cola: O(N)

Aplicación de cola de prioridad :

  • Para los algoritmos de programación , la CPU debe procesar ciertas tareas que tienen prioridades. El proceso de tener mayor prioridad se ejecuta primero.
  • En un sistema informático de tiempo compartido, el proceso de espera del tiempo de la CPU se carga en la cola de prioridad .
  • Se utiliza una cola de prioridad de ordenación para ordenar montones .

Publicación traducida automáticamente

Artículo escrito por pradiptamukherjee 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 *