COMPARTE ESTE ARTÍCULO

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ónDescripciónComplejidad
PushInserta un elemento en la parte superior.O(1)
PopExtrae y devuelve el elemento superior.O(1)
PeekMuestra el elemento superior sin retirarlo.O(1)
CountDevuelve 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:

  1. Dato (Data): la información que almacena.
  2. 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

NecesidadOpción recomendada
Código de producción generalStack<T> (biblioteca estándar).
Aprender los fundamentos internosPila con nodos propios.
Operaciones LIFO + máxima eficienciaStack<T> (menor sobrecarga de objetos).
Ajustar la pila a requisitos especialesImplementación con nodos (p. ej., rastreo de historial, contadores extra).

Buenas prácticas

  1. Evita iterar la pila modificándola (a menos que tu lógica lo requiera).
  2. Lanza excepciones apropiadas en Pop/Peek sobre colecciones vacías, o usa los métodos TryX.
  3. Dispose: si tu nodo alberga recursos no administrados, implementa IDisposable y asegúrate de liberarlos.
  4. 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

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.

Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
error: CONTENIDO PROTEGIDO