¿Qué es la estructura de datos de la cola en Python?



Este artículo le proporcionará un conocimiento detallado y completo de las estructuras de datos de cola en Python con muchos ejemplos.

Como ya ha estudiado la importancia de las estructuras de datos en el artículo anterior, profundicemos en el tema del artículo, es decir, la estructura de datos en cola. Hablaré de los siguientes temas:

Necesidad de estructura de datos de cola

Suponga que quiere ver una película algún día. En el multiplex, los boletos se emitieron por orden de llegada y la gente estaba parada una detrás de la otra esperando su turno. ¿¿Entonces que vas a hacer?? Debes haber ido a la parte de atrás y estar detrás de la última persona que esperaba el boleto.





queue-data-structure

Aquí, las personas están de pie una detrás de la otra y reciben el servicio de Primero en entrar, primero en salir (FIFO) mecanismo. Tal arreglo se conoce como Cola.



Ejemplos de la vida diaria de la cola

Consideremos algunos ejemplos en los que el tipo de cola funciona en la vida diaria:

  • Sistema de contestador telefónico La persona que llama primero en su dispositivo es atendida primero.
  • Máquina de control de equipaje - Comprueba el Equipaje que se ha guardado primero en la cinta transportadora.
  • Vehículos en el puente de peaje - Los vehículos que llegan temprano salen primero.
  • Centro de llamadas - Los sistemas telefónicos usarán Colas, para mantener en orden a las personas que los llamen, hasta que un representante de servicio esté libre.

Todos estos ejemplos siguen Primero en llegar último en irse estrategia.

Crear una estructura de datos de cola

Aparte de las operaciones complementarias, puedo decir que las principales Operaciones posibles en la Cola son:



1. En-queue o agregue un elemento al final de la cola.

2. De-queue o eliminar un elemento del principio de la cola

Ahora, comencemos creando una cola de clases en Python:

class Cola: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0
  • tamaño máximo es el número máximo de elementos que se esperan en la cola.
  • Los elementos de la cola se almacenan en la lista de Python
  • trasero indica la posición de índice del último elemento de la cola.
  • La parte posterior se toma inicialmente como -1 porque la cola está vacía
  • Anverso indica la posición del primer elemento en la cola.
  • El frente se toma como 0 inicialmente porque siempre apuntará al primer elemento de la cola

Enqueue

Ahora, cuando intente poner elementos en cola en la cola, debe recordar los siguientes puntos:

  • Si queda espacio en la cola o no, es decir, si la parte trasera es igual a max_size -1
  • La parte trasera apuntará al último elemento insertado en la cola.

Entonces, ¿cuál será el algoritmo?

#returns max_size of queue def get_max_size (self): return self .__ max_size #returns bool value ya sea que la cola esté llena o no, True si está llena y False de lo contrario def is_full (self): return self .__ rear == self .__ max_size-1 # inserta / pone en cola datos en la cola si no está completa def enqueue (self, data): if (self.is_full ()): print ('La cola está llena. No es posible poner en cola') else: self .__ rear + = 1 self. __elements [self .__ rear] = data #display todo el contenido de la cola def display (self): for i in range (0, self .__ rear + 1): print (self .__ elements [i]) #Puedes usar el debajo de __str __ () para imprimir los elementos del objeto DS mientras se depura def __str __ (self): msg = [] index = self .__ front while (index<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg

Ahora, cuando ejecutas lo siguiente:

queue1 = Cola (5)

# Ponga en cola todos los elementos requeridos.

queue1.enqueue ('A')

queue1.enqueue ('B')

queue1.enqueue ('C')

queue1.enqueue ('D')

queue1.enqueue ('E')

queue1.display ()

queue1.enqueue ('F')

imprimir (cola1)

Salida:

A

B

C

re

ES

La cola está llena. No es posible poner en cola

Datos de la cola (de adelante hacia atrás): A B C D E

De-Queue

Ahora, como ha insertado / puesto en cola los elementos en la cola, desea retirarlos de la cola / eliminarlos del frente, por lo que debe ocuparse de lo siguiente:

  • Hay elementos en la cola, es decir, la parte trasera no debe ser igual a -1.
  • En segundo lugar, debe recordar que a medida que los elementos se eliminan del frente, después de eliminar el frente, debe incrementarse para señalar el siguiente frente.
  • El frente no debe apuntar al final de la cola, es decir, igual a max_size.

Entonces, ¿cuál será el algoritmo?

# función para comprobar si la cola está vacía o no def is_empty (self): if (self .__ rear == - 1 o self .__ front == self .__ max_size): return True else: return False # función para eliminar un elemento y regresar it def dequeue (self): if (self.is_empty ()): print ('la cola ya está vacía') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data # función para mostrar elementos de de adelante hacia atrás si la cola no está vacía def display (self): if (not self.is_empty ()): for i in range (self .__ front, self .__ rear + 1): print (self .__ elements [i]) else : print ('cola vacía')

Ahora, cuando ejecute lo siguiente:

queue1 = Cola (5)

# Ponga en cola todos los elementos requeridos

queue1.enqueue ('A')

queue1.enqueue ('B')

queue1.enqueue ('C')

queue1.enqueue ('D')

queue1.enqueue ('E')

imprimir (cola1)

#Dequeue todos los elementos requeridos

print ('Dequeued:', queue1.dequeue ())

print ('Dequeued:', queue1.dequeue ())

print ('Dequeued:', queue1.dequeue ())

print ('Dequeued:', queue1.dequeue ())

que es apache spark vs hadoop

print ('Dequeued:', queue1.dequeue ())

print ('Dequeued:', queue1.dequeue ())

#Muestra todos los elementos de la cola.

queue1.display ()

Salida:

Datos de la cola (de adelante hacia atrás): A B C D E

Retirado de la cola: A

Retirado de la cola: B

Retirado de la cola: C

Retirado de la cola: D

Retirado de la cola: E

la cola ya está vacía

Sin cola: Ninguno

cola vacía

Aplicaciones de la cola

A partir de ahora, ya ha entendido los conceptos básicos de la cola. Ahora, para profundizar, veremos algunas de sus aplicaciones.

  • Ejemplo 1:

Cola de impresión en Windows utiliza una cola para almacenar todos los trabajos de impresión activos y pendientes. Cuando queremos imprimir documentos, emitimos comandos de impresión uno tras otro. Según los comandos de impresión, los documentos se alinearán en la cola de impresión. Cuando la impresora esté lista, el documento se enviará primero en primer orden para imprimirlo.

Suponga que ha emitido comandos de impresión para 3 documentos en el orden doc1, seguido de doc2 y doc3.
La cola de impresión se completará como se muestra a continuación:

doc-n, donde doc es el documento enviado a imprimir yn, es el número de páginas del documento. Por ejemplo, doc2-10 significa que doc2 se imprimirá y tiene 10 páginas. Aquí hay un código que simula la operación de la cola de impresión. Repase el código y observe cómo se usa la cola en esta implementación.

class Cola: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0 def is_full (self): if (self .__ rear = = self .__ max_size-1): return True return False def is_empty (self): if (self .__ front> self .__ rear): return True return False def enqueue (self, data): if (self.is_full ()): print ('¡¡La cola está llena !!!') else: self .__ trasero + = 1 self .__ elementos [self .__ trasero] = data def dequeue (self): if (self.is_empty ()): print ('¡La cola está vacía! !! ') else: datos = self .__ elementos [self .__ front] self .__ front + = 1 return data def display (self): para índice en rango (self .__ front, self .__ back + 1): print (self .__ elementos [index]) def get_max_size (self): return self .__ max_size #Puedes usar el siguiente __str __ () para imprimir los elementos del objeto DS mientras #debugging def __str __ (self): msg = [] index = self .__ front while (índice<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg #function that enqueue are the documents to be printed in Queue named print_queue def send_for_print(doc): global print_queue if(print_queue.is_full()): print('Queue is full') else: print_queue.enqueue(doc) print(doc,'sent for printing') #function that prints the document if number of pages of document is less than #total number of pages in printer def start_printing(): global print_queue while(not print_queue.is_empty()): #here we dequeue the Queue and take the coument that was input first for printing. doc=print_queue.dequeue() global pages_in_printer #the aim of this for loop is to find number of pages of the of document which is doc name followed by “-“ for i in range(0,len(doc)): if(doc[i]=='-'): no_of_pages=int(doc[i+1:]) break if(no_of_pages<=pages_in_printer): print(doc,'printed') pages_in_printer-=no_of_pages print('Remaining no. of pages in printer:', pages_in_printer) else: print('Couldn't print',doc[:i],'. Not enough pages in the printer.') pages_in_printer=12 print_queue=Queue(10) send_for_print('doc1-5') send_for_print('doc2-3') send_for_print('doc3-6') start_printing()

Salida:

doc1-5 enviado para imprimir

doc2-3 enviado para imprimir

doc3-6 enviado para imprimir

doc1-5 impreso

No restante. de páginas en impresora: 7

doc2-3 impreso

No restante. de páginas en impresora: 4

No se pudo imprimir el doc3. No hay suficientes páginas en la impresora

  • Ejemplo 2:

Intentemos comprender otro ejemplo que usa la estructura de datos de la cola. ¿Puede intentar comprender el código y decir qué hace la siguiente función?

  1. def divertido (n):
  2. aqueue = Cola (100)
  3. para num en rango (1, n + 1):
  4. poner en cola (num)
  5. resultado = 1
  6. while (no (aqueue.is_empty ())):
  7. num = AQUUE.DEQUEUE ()
  8. resultado * = num
  9. imprimir (resultado)

Cuando se invoca la función fun () pasando n,

  • las líneas 2 a 4 ponen en cola los elementos de 1 a n
  • las líneas 5 a 8 encuentra el producto de esos elementos quitándolos de la cola uno por uno

Con esto, llegamos al final de este artículo de Estructura de datos de cola. Si entendió y ejecutó correctamente los códigos por sí mismo, ya no es un novato en la Estructura de datos de cola.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este artículo y nos comunicaremos con usted lo antes posible.

Para obtener un conocimiento profundo de Python junto con sus diversas aplicaciones, puede inscribirse en Live con soporte 24/7 y acceso de por vida.