Una pila es una estructura de datos LIFO (Last-In, First-Out): el último elemento que entra es el primero que sale. Imagina una torre de platos; solo puedes quitar o poner el de arriba.
| Operación | Descripción | Complejidad |
|---|---|---|
Push | Inserta un elemento en la parte superior. | O(1) |
Pop | Extrae y devuelve el elemento superior. | O(1) |
Peek | Muestra el elemento superior sin retirarlo. | O(1) |
Count | Devuelve el número de elementos. | O(1) |
Pila con la clase integrada Stack<T>
var pila = new Stack<int>();
pila.Push(10);
pila.Push(20);
pila.Push(30); // [30,20,10]
Console.WriteLine(pila.Peek()); // 30
Console.WriteLine(pila.Pop()); // 30 → ahora [20,10]
foreach (var n in pila)
Console.Write($"{n} "); // 20 10
Ventajas
- Ya optimizada y probada.
- Métodos seguros (
TryPop,TryPeek). - Internamente usa un array que se redimensiona automáticamente.
¿Qué es un nodo de lista?
Un nodo es la unidad básica de una lista enlazada. Contiene dos partes:
- Dato (
Data): la información que almacena. - Referencia (
Next): el puntero al siguiente nodo (o al anterior, si es doblemente enlazada).
public class Nodo<T>
{
public T Data { get; set; }
public Nodo<T>? Next { get; set; }
public Nodo(T data) => Data = data;
}
Una lista enlazada no está indexada como un array; se recorre nodo a nodo. Esto aporta:
- Inserciones/eliminaciones en medio de la lista en O(1) (si ya tienes la referencia).
- Sin reubicaciones masivas de elementos.
Pero acceder al elemento i es O(n), pues hay que caminar desde la cabeza.
Implementar tu propia pila con nodos
Aunque normalmente usarás Stack<T>, construirla con nodos aclara cómo funciona internamente:

public class PilaEnlazada<T>
{
private Nodo<T>? _top; // nodo superior
public int Count { get; private set; }
public void Push(T item)
{
var nuevo = new Nodo<T>(item) { Next = _top };
_top = nuevo;
Count++;
}
public T Pop()
{
if (_top is null) throw new InvalidOperationException("Pila vacía");
T dato = _top.Data;
_top = _top.Next;
Count--;
return dato;
}
public T Peek()
{
if (_top is null) throw new InvalidOperationException("Pila vacía");
return _top.Data;
}
}
Uso
var pila2 = new PilaEnlazada<string>();
pila2.Push("A");
pila2.Push("B");
Console.WriteLine(pila2.Peek()); // B
Console.WriteLine(pila2.Pop()); // B
Console.WriteLine(pila2.Pop()); // A
Cuándo elegir cada opción
| Necesidad | Opción recomendada |
|---|---|
| Código de producción general | Stack<T> (biblioteca estándar). |
| Aprender los fundamentos internos | Pila con nodos propios. |
| Operaciones LIFO + máxima eficiencia | Stack<T> (menor sobrecarga de objetos). |
| Ajustar la pila a requisitos especiales | Implementación con nodos (p. ej., rastreo de historial, contadores extra). |
Buenas prácticas
- Evita iterar la pila modificándola (a menos que tu lógica lo requiera).
- Lanza excepciones apropiadas en
Pop/Peeksobre colecciones vacías, o usa los métodosTryX. - Dispose: si tu nodo alberga recursos no administrados, implementa
IDisposabley asegúrate de liberarlos. - Documenta la complejidad y las condiciones de error en XML-comments.
Conclusión
- Una pila gestiona datos en orden LIFO, ideal para algoritmos de retroceso (backtracking), evaluación de expresiones, navegación de menús, etc.
- Los nodos de lista enlazada permiten implementar estructuras flexibles cuando necesitas inserciones y eliminaciones constantes y no importa el acceso aleatorio.
- En C# dispones de la sólida
Stack<T>para la mayoría de los casos, pero comprender su construcción con nodos te da dominio completo sobre la memoria y el comportamiento, permitiéndote crear variantes personalizadas cuando el problema lo exija.
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- ¡VOLVEMOS A NUESTROS HORARIOS HABITUALES!

- Especificadores de formato en C (printf/sprintf y scanf)

- Propuestas de actividades avanzadas con XML, DTD, XPath y XSLT

- Apuntes extensos de XML y XSLT

- El momento IDEAL para impulsar tu FORMACIÓN y alcanzar tus Metas Académicas: LAS NAVIDADES.

- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)

- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)

- 60 ejercicios de funciones recursivas en Python para la carrera de Informática

- SIMULACRO 2 – FP Programación de Videojuegos

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed