¿Podemos implementar una estructura de datos de pila usando una estructura de datos de cola?

Sí, se puede implementar un “OneQueueStack” utilizando una única estructura de datos de cola, independientemente de cómo se implemente esa cola internamente. Por supuesto, hay un costo de rendimiento asociado sobre una pila “nativa”.

Una cola implementa la mayor parte de la funcionalidad de la pila, como probablemente te des cuenta. El único cambio de código real necesario es en la función Push (val) de su Pila o en su función Pop () (que se traduce entre LIFO y FIFO) y ralentizará esa función.

Re: rendimiento. Entre Push y Pop, ¿qué función necesitas para permanecer rápido?

Si elige la primera opción (Pop rápido), cuando un nuevo dato sea Push () para usted, primero debe rotar a través de todos los datos en la Cola, ya que necesita almacenar sus datos en el orden de “Cola”. De esta manera, cuando se le pide que haga estallar (), los datos más recientes se encuentran en la parte delantera de la Cola y pueden eliminarse inmediatamente ().

Si opta por la segunda opción (Push rápido), cuando los datos son Push () para usted, simplemente los pone en cola () tal como están. Pero luego, cuando se llama a Pop (), debe rotar a través de toda la cola para llegar al elemento posterior, para quitarlo ().

Entonces, la respuesta es sí, puede implementar esto con una sola cola, y debe elegir si desea una función Push () más lenta o una función Pop () más lenta.

Si podemos.

stack es el tipo de estructura de datos LIFO (último en entrar, primero en salir) y Queue es el tipo de estructura de datos FIFO (primero en entrar, último en salir).

Ambos representan el comportamiento de la colección. Es fácil implementar la estructura de datos de la pila desde la cola.

El siguiente enlace contiene un ejemplo abrumador, revíselo para obtener una aclaración detallada.

Programa Java para implementar Stack usando colas

Se puede implementar una pila usando dos colas. Deje que la pila a implementar sea ‘s’ y las colas utilizadas para implementar sean ‘q1’ y ‘q2’. La pila ‘s’ se puede implementar de dos maneras:

Método 1 (haciendo que la operación de empuje sea costosa)
Este método se asegura de que el elemento recién ingresado esté siempre al frente de ‘q1’, de modo que la operación emergente simplemente desaparezca de ‘q1’. ‘q2’ se usa para poner cada elemento nuevo al frente de ‘q1’.

push (s, x) // x es el elemento a empujar y s es stack
1) Poner en cola x a q2
2) Uno por uno descoloca todo, desde q1 y en cola hasta q2.
3) Cambia los nombres de q1 y q2
// El intercambio de nombres se realiza para evitar un movimiento más de todos los elementos.
// de q2 a q1.

pop (s)
1) Retire un elemento de q1 y devuélvalo.

Método 2 (haciendo que la operación pop sea costosa)
En la operación de inserción, el nuevo elemento siempre se pone en cola a q1. En la operación pop (), si q2 está vacío, todos los elementos, excepto el último, se mueven a q2. Finalmente, el último elemento se descuenta de q1 y se devuelve.

empujar (s, x)
1) Ponga en cola x a q1 (suponiendo que el tamaño de q1 es ilimitado).

pop (s)
1) Uno a uno elimina todo excepto el último elemento de q1 y lo pone en cola a q2.
2) Elimine el último elemento de q1, el elemento eliminado es el resultado, guárdelo.
3) Cambia los nombres de q1 y q2
4) Devuelva el artículo almacenado en el paso 2.
// El intercambio de nombres se realiza para evitar un movimiento más de todos los elementos.
// de q2 a q1.

Si podemos hacerlo

Implementar pila usando colas – GeeksforGeeks

El artículo anterior tiene una breve explicación.

Espero que esto te ayude 🙂