domingo, 22 de octubre de 2017

Listas, Colas, Pilas y Conjuntos en C# - Parte 4/6: Stack y Stack(T)

Índice

1. Introducción
2. Palabras Clave
3. Clase No-Genérica Stack
4. Clase Genérica Stack≶T>
5. Conclusiones
6. Literatura & Enlaces

1. Introducción

Este artículo describe la estructura de datos o colección Stack (versión no-genérica y genérica) que organiza los elementos como una pila y sigue el esquema último en entrar primero en salir o LIFO. Se describe la funcionalidad de los métodos principales Push (insertar un elemento) y Pop (remover un elemento); y además, Peek: el cual se usa para obtener el elemento a la cabeza de la pila.

2. Palabras Clave

  • Colección
  • Estructura de datos
  • LIFO
  • Pila
  • Stack

3. Clase No-Genérica Stack

La clase Stack (namespace System.Collections) es la clase que organiza sus elementos siguiendo un esquema LIFO (last-in-last-out), lo que quiere decir es que a medida que se van insertando elementos cada uno de éstos se apila sobre su antecesor y tiene mayor precedencia para ser manipulado. La Figura 1 ilustra el comportamiento de esta estructura:
Pila o Stack
Figura 1. Pila o Stack.
Esta clase corresponde con la versión no-genérica e implementa las interfaces de colecciones ICollection y IEnumerable.

El crecimiento y decrecimiento de esta estructura es dinámico: a medida que se insertan elementos está crece, lo contrario ocurre cuando se remueven elementos ("Stack Class", 2017).

Se puede hablar de tres operaciones básicas:
  • Push: inserta un elemento en la pila, en la parte superior. Mientras que el conteo (Count) sea menor que la capacidad, el rendimiento de la operación es de O(1).
  • Pop: remueve un elemento de la pila. Complejidad O(1).
  • Peek: toma (sin remover) el elemento a la cabeza de la pila. Complejidad o rendimiento O(1).
Un ejemplo de uso básico podría ser:

4. Clase Genérica Stack<T>

Este artefacto o clase representa la versión genérica de esta estructura tipo LIFO. Se halla en el nombre de espacio System.Colletions.Generic. A diferencia de su contraparte no-genérica, cuenta con mayor rendimiento ya que no hace uso de las operaciones boxing y unboxing (Boxing y Unboxing en C#).


Similar a una cola o Queue, esta estructura se usa para el almecenamiento temporal de elementos que siguen una lógica de tratamiento de acuerdo al esquema último-en-entrar-primero-en-salir.


También cuenta con los métodos básicos Push, Pop y Peek.


Vale apuntar que esta clase cuenta con una versión para acceso concurrente: System.Collections.Concurrent.ConcurrentStack<T>; para permitir que múltiples threads acceden a los elementos de la pila ("Stack(T) Class", 2017).


La versión de ejemplo de uso en genéricos queda de la siguiente forma:


5. Conclusiones

En este artículo se presentó la colección o estructura de datos que sigue el esquema de organización de sus elementos basado en LIFO: el último elemento que es insertado a la pila es el primero en salir. Se describieron, grosso modo, las operaciones elementales: Push, Pop y Peek.

En el siguiente artículo se describirá la clase BitArray: colección de valores booleanos compactados.

6. Literatura & Enlaces


Albahari, J., Albahari, B. (2012). C# 5.0 in a Nutshell. United States: O'Reilly Media.

Stack Class (System.Collections) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.collections.stack(v=vs.110).aspx
Stack(T) Class (System.Collections.Generic) (2017). Recuperado desde: https://msdn.microsoft.com/en-us/library/3278tedw(v=vs.110).aspx
Boxing y Unboxing en C# (2017). Recuperado desde: https://ortizol.blogspot.com.co/2014/03/boxing-y-unboxing-en-c.html



O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.