¿Cuál es la diferencia básica entre stack y queue?


130

¿Cuál es la diferencia básica entre stack y queue?

Por favor, ayúdame, no puedo encontrar la diferencia.

¿Cómo diferenciar una pila y una cola?

Busqué la respuesta en varios enlaces y encontré esta respuesta ...

En programación de alto nivel,

una pila se define como una lista o secuencia de elementos que se alarga colocando nuevos elementos "encima" de los elementos existentes y se acorta eliminando elementos de la parte superior de los elementos existentes. Es un ADT [Tipo de datos abstractos] con operaciones matemáticas de "push" y "pop".

Una cola es una secuencia de elementos a la que se agrega colocando el nuevo elemento en la parte posterior de los existentes y se acorta eliminando elementos delante de la cola. Es un ADT [Tipo de datos abstractos]. Hay más de estos términos entendidos en la programación de Java, C ++, Python, etc.

¿Puedo tener una respuesta más detallada? Por favor, ayúdame.


12
Parece que ha respondido su propia pregunta: una pila es un contenedor de último en entrar, primero en salir (LIFO), y una cola es un contenedor de primero en entrar, primero en salir (FIFO).
Iridium

Respuestas:


151

Stack es una estructura de datos LIFO (último en entrar, primero en salir). El enlace asociado a wikipedia contiene descripciones detalladas y ejemplos.

Queue es una estructura de datos FIFO (primero en entrar, primero en salir). El enlace asociado a wikipedia contiene descripciones detalladas y ejemplos.


131

Imagina una pila de papel . La última pieza puesta en la pila está en la parte superior, por lo que es la primera en salir. Esta es LIFO . Agregar un trozo de papel se llama "empujar" y quitar un trozo de papel se llama "reventar".

Imagina una cola en la tienda . La primera persona en la fila es la primera persona que se sale de la fila. Este es FIFO . Una persona que se pone en línea está "en cola", y una persona que se sale de la línea está "en cola".


3
Una de las mejores analogías que se me ocurren.
Yeikel

83

Un modelo visual

Pila de panqueques (LIFO)

La única forma de agregar uno y / o eliminar uno es desde la parte superior.

pila de panqueques

Cola de línea (FIFO)

Cuando uno llega, llegan al final de la cola y cuando uno se va, salen del frente de la cola.

línea dmv

Dato curioso: los británicos se refieren a las filas de personas como una cola


66
Jee, esta debe ser la respuesta de la OMI. Gracias @Jacksonkr
Kulasangar

Jaja, estoy seguro de que esta es una descripción perfecta de Queue and Stack, pero solo por el bien de los argumentos, ¿qué pasa si quiero agregar el primer panqueque al plato? Sé que esto se puede completar con un stack.size () vs. if (! Stack.isEmpty ()), pero aún así ese primer panqueque podría ser el mejor:) ... De cualquier manera, buena respuesta y estoy de acuerdo en que esto es lo más claro ... parece interesante que los británicos se refieran a las líneas como Colas (si eso es correcto), en un lenguaje que no sea de programación, todavía consideraría que una línea donde la primera entrada sale primero (después de salir de la línea / cola )
ViaTech

Espera, ¿no se les llama colas en otro lado?
paseo el

37

Puede pensar en ambos como una lista ordenada de cosas (ordenadas por el momento en que se agregaron a la lista). La principal diferencia entre los dos es cómo los nuevos elementos entran en la lista y los elementos antiguos salen de la lista.

Para una pila, si tengo una lista a, b, c, y agrego d, se agrega al final, así que termino con a,b,c,d. Si quiero mostrar un elemento de la lista, elimino el último elemento que agregué, que es d. Después de un pop, mi lista a,b,cvuelve a estar

Para una cola, agrego nuevos elementos de la misma manera. a,b,cse convierte a,b,c,ddespués de agregar d. Pero, ahora, cuando aparece, tengo que tomar un elemento del frente de la lista, para que se convierta b,c,d.

¡Es muy simple!


14

Cola

Queue es una colección ordenada de artículos.

Los elementos se eliminan en un extremo llamado extremo "frontal" de la cola.

Los elementos se insertan en el otro extremo llamado 'trasero' de la cola.

El primer elemento insertado es el primero en eliminarse (FIFO).

Apilar

Stack es una colección de artículos.

Permite el acceso a un solo elemento de datos: el último elemento insertado.

Los elementos se insertan y eliminan en un extremo llamado 'Top of the stack'.

Es un objeto dinámico y en constante cambio.

Todos los elementos de datos se colocan encima de la pila y se quitan

Esta estructura de acceso se conoce como estructura Last in First out (LIFO)


Así que, básicamente, una 'cola' es un "FIFO": primero en entrar, primero en salir. Mientras que un 'stack' es un "LIFO" - último en entrar, primero en salir. ¿Estoy en lo correcto?
Sebastian Nielsen

@SebastianNielsen Sí correcto como se menciona en la respuesta.
Dissanayake

Pero, ¿cuál es la diferencia entre una lista vinculada y una pila? ¿No es lo mismo?
Sebastian Nielsen

@SebastianNielsen La pila es un ADT, lo que significa que expone una interfaz, que es la operación push y pop, pero el mecanismo subyacente (implementación) está oculto para el usuario final. Una pila se puede implementar con una matriz o con una lista vinculada.
gdyrrahitis

13

APILAR:

  1. La pila se define como una lista de elementos en la que podemos insertar o eliminar elementos solo en la parte superior de la pila.
  2. El comportamiento de una pila es como un sistema de último en entrar, primero en salir (LIFO).
  3. La pila se usa para pasar parámetros entre funciones. En una llamada a una función, los parámetros y las variables locales se almacenan en una pila.
  4. Los lenguajes de programación de alto nivel como Pascal, c, etc. que brindan soporte para la recursividad usan la pila para la contabilidad. Recuerde que en cada llamada recursiva, es necesario guardar el valor actual de los parámetros, las variables locales y la dirección de retorno (la dirección a la que debe regresar el control después de la llamada).

COLA:

  1. Queue es una colección del mismo tipo de elemento. Es una lista lineal en la que las inserciones pueden tener lugar en un extremo de la lista, llamada parte posterior de la lista, y las eliminaciones solo pueden tener lugar en el otro extremo, llamada parte delantera de la lista
  2. El comportamiento de una cola es como un sistema Primero en entrar, primero en salir (FIFO).

Estoy bastante seguro de que también puede insertar al final o al comienzo de una pila, creo que lo importante a tener en cuenta aquí es el FIFO vs. LIFO
Mike

6

Una pila es una colección de elementos, que se pueden almacenar y recuperar de uno en uno. Los elementos se recuperan en orden inverso a su tiempo de almacenamiento, es decir, el último elemento almacenado es el siguiente elemento que se recuperará. Una pila a veces se denomina estructura de último en entrar, primero en salir (LIFO) o primero en entrar, último en salir (FILO). Los elementos almacenados previamente no se pueden recuperar hasta que se haya recuperado el último elemento (generalmente denominado elemento 'superior').

Una cola es una colección de elementos, que se pueden almacenar y recuperar de uno en uno. Los elementos se recuperan en orden de tiempo de almacenamiento, es decir, el primer elemento almacenado es el siguiente elemento que se recuperará. Una cola a veces se denomina estructura de primero en entrar, primero en salir (FIFO) o de último en entrar, último en salir (LILO). Los elementos almacenados posteriormente no se pueden recuperar hasta que se haya recuperado el primer elemento (generalmente denominado elemento "frontal").


2

STACK: Stack se define como una lista de elementos en la que podemos insertar o eliminar elementos solo en la parte superior de la pila

La pila se usa para pasar parámetros entre funciones. En una llamada a una función, los parámetros y las variables locales se almacenan en una pila.

Una pila es una colección de elementos, que se pueden almacenar y recuperar de uno en uno. Los elementos se recuperan en orden inverso a su tiempo de almacenamiento, es decir, el último elemento almacenado es el siguiente elemento que se recuperará. Una pila a veces se denomina estructura de último en entrar, primero en salir (LIFO) o primero en entrar, último en salir (FILO). Los elementos almacenados previamente no se pueden recuperar hasta que se haya recuperado el último elemento (generalmente denominado elemento 'superior').

COLA:

Queue es una colección del mismo tipo de elemento. Es una lista lineal en la que las inserciones pueden tener lugar en un extremo de la lista, llamada parte posterior de la lista, y las eliminaciones solo pueden tener lugar en el otro extremo, llamada parte delantera de la lista

Una cola es una colección de elementos, que se pueden almacenar y recuperar de uno en uno. Los elementos se recuperan en orden de tiempo de almacenamiento, es decir, el primer elemento almacenado es el siguiente elemento que se recuperará. Una cola a veces se denomina estructura de primero en entrar, primero en salir (FIFO) o de último en entrar, último en salir (LILO). Los elementos almacenados posteriormente no se pueden recuperar hasta que se haya recuperado el primer elemento (generalmente denominado elemento "frontal").


2

Para intentar simplificar en exceso la descripción de una pila y una cola, ambas son cadenas dinámicas de elementos de información a las que se puede acceder desde un extremo de la cadena y la única diferencia real entre ellas es el hecho de que:

cuando trabajas con una pila

  • inserta elementos en un extremo de la cadena y
  • recupera y / o elimina elementos del mismo extremo de la cadena

mientras que con una cola

  • inserta elementos en un extremo de la cadena y
  • los recuperas / eliminas del otro extremo

NOTA : Estoy usando la redacción abstracta de recuperar / eliminar en este contexto porque hay casos en los que solo recuperas el elemento de la cadena o, en cierto sentido, solo lo lees o accedes a su valor, pero también hay casos en los que eliminas el elemento de la cadena y, finalmente, hay casos en los que realiza ambas acciones con la misma llamada.

Además, el elemento de palabra se usa a propósito para abstraer la cadena imaginaria tanto como sea posible y desacoplarla de términos específicos del lenguaje de programación. Esta entidad de información abstracta llamada elemento podría ser cualquier cosa, desde un puntero, un valor, una cadena o caracteres, un objeto, ... dependiendo del idioma.

En la mayoría de los casos, aunque en realidad es un valor o una ubicación de memoria (es decir, un puntero). Y el resto solo está ocultando este hecho detrás de la jerga del lenguaje <

Una cola puede ser útil cuando el orden de los elementos es importante y debe ser exactamente el mismo que cuando los elementos entraron por primera vez en su programa. Por ejemplo, cuando procesa una transmisión de audio o cuando almacena datos de la red en búfer. O cuando realiza cualquier tipo de almacenamiento y procesamiento hacia adelante. En todos estos casos, necesita que la secuencia de los elementos salga en el mismo orden en que entraron en su programa; de lo contrario, la información puede dejar de tener sentido. Por lo tanto, puede dividir su programa en una parte que lee datos de alguna entrada, los procesa y los escribe en una cola, y una parte que recupera datos de la cola los procesa y los almacena en otra cola para procesarlos o transmitirlos. .

Una pila puede ser útil cuando necesita almacenar temporalmente un elemento que se utilizará en los pasos inmediatos de su programa. Por ejemplo, los lenguajes de programación usualmente usan una estructura de pila para pasar variables a funciones. Lo que realmente hacen es almacenar (o empujar) los argumentos de la función en la pila y luego saltar a la función donde eliminan y recuperan (o hacen estallar) el mismo número de elementos de la pila. De esa forma, el tamaño de la pila depende del número de llamadas anidadas de funciones. Además, después de que se ha llamado a una función y terminado lo que estaba haciendo, deja la pila en la misma condición que antes de que se haya llamado. De esa manera, cualquier función puede operar con la pila ignorando cómo operan otras funciones con ella.

Por último, debe saber que hay otros términos utilizados para los mismos conceptos similares. Por ejemplo, una pila podría llamarse un montón. También hay versiones híbridas de estos conceptos, por ejemplo, una cola de doble extremo puede comportarse al mismo tiempo que una pila y como una cola, porque ambos extremos pueden acceder a ella simultáneamente. Además, el hecho de que se le proporcione una estructura de datos como una pila o como una cola no significa necesariamente que se implemente como tal, hay instancias en las que una estructura de datos se puede implementar como cualquier cosa y se puede proporcionar como un específico estructura de datos simplemente porque se puede hacer que se comporte como tal. En otras palabras, si proporciona un método push y pop a cualquier estructura de datos, ¡mágicamente se convierten en pilas!


No use el formato de código para texto que no sea código.
Marqués de Lorne

1

STACK es una lista LIFO (última entrada, primera salida). significa supongamos que se insertan 3 elementos en la pila, es decir, 10,20,30. 10 se inserta primero y 30 se inserta en último lugar, por lo que 30 se elimina por primera vez de la pila y 10 se elimina por última vez de la pila. Esta es una lista LIFO (Última entrada, primera salida).

QUEUE es la lista FIFO (Primero en entrar, primero en salir). Significa que primero se inserta un elemento que se debe eliminar primero.


1

Apila una colección considerada vertical. Primero entienda que una colección es un OBJETO que reúne y organiza otros OBJETOS más pequeños. Estos OBJETOS más pequeños se denominan comúnmente Elementos. Estos elementos son "Empujados" en la pila en un orden ABC donde A es primero y C es el último. verticalmente se vería así: 3er elemento agregado) C 2do elemento agregado) B 1er elemento agregado) A

Observe que la "A" que se agregó por primera vez a la pila está en la parte inferior. Si desea eliminar la "A" de la pila, primero debe eliminar "C", luego "B" y finalmente su elemento de destino "A". La pila requiere un enfoque LIFO al tratar con las complejidades de una pila. (Último en entrar, primero en salir) Al eliminar un elemento de una pila, la sintaxis correcta es pop. no eliminamos un elemento de una pila, lo "sacamos".

Recordemos que "A" fue el primer elemento empujado a la pila y "C" fue el último elemento empujado en la pila. Si decide que le gustaría ver qué hay en la parte inferior de la pila, ya que los 3 elementos están ordenados en la pila A es el primero B es el segundo y C es el tercer elemento, la parte superior tendría que extraerse y luego segundo elemento agregado para ver la parte inferior de la pila.


Formatee su pregunta para que se vea mejor y sea más legible.
Neeku
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.