Cómo implementar una cola de doble finalización sin una lista vinculada

Asumiré que sabes lo que es una cola.

Puede implementar una cola de doble extremo utilizando una matriz. Aquí hay un ejemplo en VisualBasic

La clase Queue junto con un constructor.

Cola de clase pública

Private QueueArray (255) como Integer ‘Esta es la matriz que contiene la cola. Esto puede contener 256 artículos
Capacidad privada como número entero ‘El número de elementos que la cola puede contener
Private QueueIsEmpty as Boolean ‘Establecido en verdadero si la cola está vacía
Private QueueIsFull as Boolean ‘Set to true of the queue is full
Private InsertionPoint como índice de matriz de enteros donde se realizará la siguiente inserción
Private RemovalPoint como índice de matriz de enteros donde se realizará la próxima eliminación
Private QueueCount as Integer ‘Número de elementos en la cola

‘El constructor. Inicializa todo aquí
Public Sub New ()
Capacidad = 256: QueueIsEmpty = True: QueueIsFull = False: InsertionPoint = 0: RemovalPoint = 0: QueueCount = 0
End Sub

Siguiente parada; Los dos métodos más importantes de la clase Queue. El método Enqueue para agregar cosas a la cola y Dequeue para eliminarlas

Public En Enueue (artículo como entero)

Si QueueIsFull = False entonces ‘Primero lo primero, solo agregue a la Cola si no está lleno
QueueArray (InsertionPoint) = item ‘Agrega el ítem a la Cola
QueueCount = QueueCount + 1 ‘Incrementar el número de elementos en la cola

‘No olvide verificar si la cola se llenó después de la inserción
Si QueueCount = Capacidad, entonces QueueIsFull = True

InsertionPoint = InsertionPoint + 1 ‘Mover al siguiente punto de inserción

‘Esto es lo que lo convierte en una cola doble. Se envuelve (vuelve a 0)
Si InsertionPoint> 255, entonces InsertionPoint = 0
Terminara si

End Sub

Dequeue de función pública () como entero

Si QueueIsEmpty = False, entonces ‘Eliminar solo de una cola si no está vacío

‘Obtenga el artículo en el punto de extracción
Dim elemento como Integer = QueueArray (RemovalPoint)

QueueCount = QueueCount – 1 ‘Disminuye el número de elementos en la cola

‘Compruebe si la cola se quedó vacía después de la eliminación
Si QueueCount = 0 Entonces QueueIsEmpty = True

RemovalPoint = RemovalPoint + 1 ‘Incremento al siguiente punto de eliminación

‘ Envolver alrededor. Es una cola doble, ¿recuerdas?
Si RemovalPoint> 255, entonces RemovalPoint = 0

Devolver artículo ‘Devolver artículo de la cola
Terminara si

Función final

Clase final

Esas son las partes más importantes. Agreguemos algunos métodos más útiles. Count que devolverá el número de elementos en la cola, IsEmpty que devolverá True si la cola está vacía e IsFull que devolverá True si la cola está llena al IsFull . Entonces agregue

Recuento de funciones públicas () como entero
Return QueueCount
Función final

Función pública IsFull () como booleana
Cola de retorno completa
Función final

Función pública IsEmpty () como booleana
Cola de retorno completa
Función final

Ahí. Una cola simple de doble extremo sin usar una lista vinculada. Por supuesto, todavía necesita algunos retoques como, por ejemplo, generar un error cuando intenta eliminar de una Cola vacía, etc.

Espero que haya ayudado.

Puede implementar una deque (o cola de doble extremo) fácilmente con una matriz circular.

  • Una entrada restringida de entrada: eliminación: ambos extremos, inserción: un extremo.

Debe modificar la función de eliminación, con dos funciones de eliminación separadas: deleteFront () y deleteRear ().

  • Una salida restringida: eliminación: un extremo, inserción: ambos extremos.

Implementación similar, realice dos funciones para la tarea de inserción: insertFront () e insertDelete ().

La implementación es simple. Si tiene alguna dificultad en la implementación, primero intente implementar una cola circular simple.

Algunos recursos que te ayudarían:

Deque | Set 1 (Introducción y Aplicaciones) – GeeksQuiz

¿Implementando una deque usando una matriz circular?

http://www.spatial.cs.umn.edu/Co

hay dos formas …

  • Uno a través de matriz circular
  • Otras listas de Via Doubly Linked.

Puede encontrar su implementación en la web y hay tutoriales disponibles en youtube …
Solo házlo…