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
/Peek
sobre colecciones vacías, o usa los métodosTryX
. - Dispose: si tu nodo alberga recursos no administrados, implementa
IDisposable
y 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
- Proyectos que puedes empezar para aprender a programar (Academia San Roque)
- 15 ejercicios básicos en R (con soluciones)
- 📘 5 Ejercicios Sencillos de Programación en R (con soluciones)
- Guía para Aprender a Estudiar Programación con las 10 Claves de la Autodisciplina
- Serializar una lista de personas (nombre, apellido, DNI) en Java y guardarla en un archivo binario
- Simulacro de Examen — Fundamentos de Programación (Laboratorio)
- Reflexiones en Academia SanRoque: La importancia de la motivación, el esfuerzo y el aprendizaje en la educación y la formación
- CHECK Constraint en Oracle SQL: garantiza la calidad de tus datos paso a paso
- Simulacro #4 – Examen de C++ / Estructuras de Datos
ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido
Comments are closed