Las pilas (Stack) y las colas (Queue) son dos colecciones muy similares entre si ya que solo varia la forma en que guardan y extraen los elementos que contienen. En ciertas cosas estas dos colecciones se parece a un ArrayList, como por ejemplo que soporta el redimensionamiento automático y que los elementos son almacenados como objetos (System.Object). Pero también tienen algunas diferencias, como por ejemplo que no se puede cambiar su capacidad y no se puede acceder a sus elementos a través de Ãndices
En algunas ocasiones, es importante tener un control sobre el orden en que los elementos son ingresados y obtenidos de la colección. Por esta razón existen las colecciones Stack y Queue. Como se menciono anteriormente, en estas colecciones NO es posible acceder aleatoriamente mediante Ãndices a sus elementos, sino que es necesario utilizar un método encargado de extraer un elemento a la vez. Pero cual elemento?. Precisamente en la respuesta a esa pregunta radica la diferencia entre estas dos colecciones.
La pila (Stack), es una colección en la que todo nuevo elemento se ingresa al final de la misma, y únicamente es posible extraer el ultimo elemento de la colección. Por este comportamiento, el Stack es conocido como una colección LIFO (Last Input Fisrt Output) ya que siempre el ultimo elemento ingresado a la colección, será el primero en salir. Quizás la mejor manera de recordar el comportamiento de un Stack, es asociándolo con una “pila” de platos en donde cada plato esta encima del otro y en caso de querer ingresar un plato a la pila, lo que se debe hacer es ponerlo encima del ultimo plato. Luego cuando se quiere sacar un plato de la pila, solo podemos coger el ultimo plato.
La cola (Queue), tiene el comportamiento contrario a la pila. Todo nuevo elemento se agrega al principio de la colección y solo se puede extraer el ultimo elemento. Por esta razón, la cola se conoce como una colección FIFO (Fisrt Input First Output) ya que el primer elemento que ingresa a la cola es el primer elemento que sale. Para recordar este comportamiento se puede asociar la Queue con la fila que se debe hacer en un banco para realizar una consignación. En ese caso, el cajero atiende en el orden en que llegan las personas a la cola.
Las colecciones Stack y Queue se encuentran en el espacio de nombres System.Collections como todas las colecciones no genéricas.
Para implementar cada una de ellas se debe utilizar la clase Stack y Queue respectivamente y utilizar sus métodos que ofrecen la posibilidad de agregar elementos a la colección y extraer elementos según el comportamiento de la colección que se este utilizando.
Como se ve en la figura anterior, para agregar elementos a una pila se debe utilizar el método Push que recibe como parámetro un Object. Mientras que en la cola se debe utilizar el método Enqueue (encolar). Ambos métodos, incrementan automáticamente la capacidad de la colección.
Para obtener un elemento de la colección, contamos con dos opciones diferentes:
1. Obtener el elemento indicado según el comportamiento de la colección sin quitarlo de la colección. Esto se logra mediante el método Peek de cada colección.
2. Obtener un elemento de la colección, quitándolo de la misma. Esto se logra mediante el método Pop de la pila (Stack) o el método Dequeue de la cola (Queue).
Ejemplo del Stack:
Ejemplo del Queue:
Este par de colecciones deben ser usadas cuando nos interesa tener control sobre el orden en que los elementos son obtenidos de las mismas. La pila se debe usar cuando queremos obtener los elementos en el orden inverso al cual fueron ingresados. Mientras que la cola debe ser utilizada cuando queremos obtener los elementos en el mismo orden que fueron ingresados.

buen dia
que buen ejemplo esto es lo que necesitavamos para terminar las clases de stack, queue y arraylist espero y pongan algunos ejemplos de arboles
salu2 =)…
Por: Alex el Jueves, Octubre 23, 2008
a las 9:07 am
hola me gustaria recibir informacio en mi correo referente a lo que es c# ya que estudio informatica y estamos programando con este programa espero su rspuesta
gracias
Por: ivan bautista el Jueves, Noviembre 6, 2008
a las 9:40 pm
Hola buen dÃa es una muy buena aportación muy bien explicado.
gracias
Por: Sagrario el Jueves, Mayo 14, 2009
a las 8:44 am
Excelente aporte mi amigo
muy útil este tutorial. mas aun cuando almacenamos en pilas y colas referencias de datos
Por: El J el Jueves, Mayo 21, 2009
a las 9:54 am
Oye amigo excelente tu articulo eh, de verdad gracias me estas ayudando bastante, eh estado buscando informacion asi de buena para comprender mejor el sistema, es que estamos trabajando en C# .NET y eh visto algo de tu demas informacion y esta bastante buena eh muchas GRACIAS, estaria bien si pudieras meter feedburner para las entradas se envien a el correo de alguien.
Saludos y Gracias de nuevo
PD. Agregado a favoritos
Por: Hugo el Viernes, Junio 12, 2009
a las 9:43 am
Gracias amigo
Ese es realmente el objetivo de este blog. Explicar de una manera muy básica aquellos conceptos que son esenciales al momento de programar en .NET.
Saludos
Por: fzapataramirez el Viernes, Junio 12, 2009
a las 3:54 pm