Posteado por: fzapataramirez | Viernes, agosto 29, 2008

Colecciones de datos en C#.NET (Parte III: Stack & Queue)

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.

image

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:

image
Resultado:
image

Ejemplo del Queue:

image

image

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.


Responses

  1. 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 =)…

  2. 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

  3. Hola buen día es una muy buena aportación muy bien explicado.

    gracias

  4. Excelente aporte mi amigo
    muy útil este tutorial. mas aun cuando almacenamos en pilas y colas referencias de datos

  5. 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

    • Gracias amigo

      Ese es realmente el objetivo de este blog. Explicar de una manera muy bsica aquellos conceptos que son esenciales al momento de programar en .NET.

      Saludos

  6. exelente explicacion…de facil comprension y muy practico, muchas gracias!

    me gustaria que me llegaran a mi correo invitaciones o post sobre mas temas referentes a programaci9on en C# ya que estudio Ing. Sistemas y me serian muy utiles…

    esperare una respuesta

  7. hola que tal tengo una duda en visual .net como puedo mostrar mi Stack en un listbox se puede o no es mi consultaya tengo mi pila pero tengo q mostrar los elementos q contiene lo puedo hacer en el listbox o en una ventana de mensage de antemano gracias

  8. muy buenas respuestas
    me an serbido de mucho
    Gracias

  9. Gracias!

  10. Muy bien explicado,
    gracias… men


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: