Pila de C# con ejemplos Push & Pop
โก Resumen inteligente
En C#, una pila es una colecciรณn del espacio de nombres System.Collections que sigue el principio de รบltimo en entrar, primero en salir (LIFO), donde el mรฉtodo Push agrega un elemento a la parte superior y el mรฉtodo Pop lo elimina.

ยฟQuรฉ es la pila en C#?
La pila es una colecciรณn de casos especiales que representa un concepto de รบltimo en entrar, primero en salir (LIFO). Para entender primero LIFO, tomemos un ejemplo. Imagine una pila de libros con cada libro uno encima del otro.
El concepto de รบltimo en entrar, primero en salir en el caso de los libros significa que sรณlo el libro que estรก mรกs arriba se puede quitar de la pila de libros. No es posible quitar un libro de entre medio, porque eso perturbarรญa la colocaciรณn de la pila.
Por lo tanto en C#, la pila tambiรฉn funciona de la misma manera. Los elementos se agregan a la pila, uno encima del otro. El proceso de agregar un elemento a la pila se llama operaciรณn de inserciรณn. Para eliminar un elemento de una pila, tambiรฉn puede eliminar el elemento superior de la pila. Esta operaciรณn se conoce como pop.
Veamos con mรกs detalle las operaciones disponibles para la colecciรณn Stack.
Declaraciรณn de la pila
Se crea una pila con la ayuda del tipo Stack Data. La palabra clave "nuevo" se utiliza para crear un objeto de una pila. Luego, el objeto se asigna a la variable st.
Stack st = new Stack()
Agregar elementos a la pila
El mรฉtodo push se utiliza para agregar un elemento a la pila. La sintaxis general de la declaraciรณn se proporciona a continuaciรณn.
Stack.push(element)
Quitar elementos de la pila
El mรฉtodo pop se utiliza para eliminar un elemento de la pila. La operaciรณn pop devolverรก el elemento superior de la pila. La sintaxis general de la declaraciรณn se proporciona a continuaciรณn.
Stack.pop()
Contar
Esta propiedad se utiliza para obtener la cantidad de elementos en la pila. A continuaciรณn se muestra la sintaxis general de esta declaraciรณn.
Stack.Count
Contiene
Este mรฉtodo se utiliza para ver si un elemento estรก presente en la pila. A continuaciรณn se muestra la sintaxis general de esta declaraciรณn. La declaraciรณn devolverรก verdadero si el elemento existe; de โโlo contrario, devolverรก el valor falso.
Stack.Contains(element)
Ahora veamos cรณmo funciona esto a nivel de cรณdigo. Todo el cรณdigo mencionado a continuaciรณn se escribirรก en nuestro Aplicaciรณn de consola. El cรณdigo se escribirรก en nuestro archivo Program.cs.
En el siguiente programa, escribiremos el cรณdigo para ver cรณmo podemos utilizar los mรฉtodos mencionados anteriormente.
Ejemplo 1: Mรฉtodo Stack.Push()
En este ejemplo veremos
- Cรณmo se crea una pila.
- Cรณmo mostrar los elementos de la pila y utilizar los mรฉtodos Count y Contain.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); foreach (Object obj in st) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the stack " +st.Count); Console.WriteLine("Does the stack contain the elements 3 "+st.Contains(3)); Console.ReadKey(); } } }
Code Explicaciรณn:-
- El primer paso se utiliza para declarar la pila. Aquรญ declaramos "st" como una variable para contener los elementos de nuestra pila.
- A continuaciรณn, agregamos 3 elementos a nuestra pila. Cada elemento se agrega mediante el mรฉtodo Push.
- Ahora bien, dado que no se puede acceder a los elementos de la pila a travรฉs de la posiciรณn del รญndice como el lista de arreglo, necesitamos utilizar un enfoque diferente para mostrar los elementos de la pila. El Objeto (obj) es una variable temporal, que se declara para contener cada elemento de la pila. Luego usamos la declaraciรณn foreach para revisar cada elemento de la pila. Para cada elemento de la pila, el valor se asigna a la variable obj. Luego usamos el comando Console.Writeline para mostrar el valor en la consola.
- Estamos usando la propiedad Count (st.count) para obtener la cantidad de elementos en la pila. Esta propiedad devolverรก un nรบmero. Luego mostramos este valor en la consola.
- Luego usamos el mรฉtodo Contiene para ver si el valor de 3 estรก presente en nuestra pila. Esto devolverรก un valor verdadero o falso. Luego mostramos este valor de retorno en la consola.
Si el cรณdigo anterior se ingresa correctamente y se ejecuta el programa, se mostrarรก el siguiente resultado.
Salida:
En el resultado, podemos ver que se muestran los elementos de la pila. Ademรกs, se muestra el valor de Verdadero para indicar que el valor de 3 estรก definido en la pila.
Nota: :Has notado que el รบltimo elemento insertado en la pila se muestra primero. Este es el elemento superior de la pila. La cantidad de elementos de la pila tambiรฉn se muestra en la salida.
Ejemplo 2: Mรฉtodo Stack.Pop()
Ahora veamos la funcionalidad "eliminar". Veremos el cรณdigo necesario para eliminar el elemento superior de la pila.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); st.Pop(); foreach (Object obj in st) { Console.WriteLine(obj); } Console.ReadKey(); } } }
Code Explicaciรณn:-
- Aquรญ simplemente emitimos el mรฉtodo pop que se utiliza para eliminar un elemento de la pila.
Si el cรณdigo anterior se ingresa correctamente y se ejecuta el programa, se mostrarรก el siguiente resultado.
Salida:
Podemos ver que el elemento 3 fue eliminado de la pila.
Mรฉtodo Stack Peek() de C#
Los mรฉtodos Push y Pop trabajan con el elemento superior de la pila, pero a veces solo necesitas ver el elemento superior sin eliminarlo. El mรฉtodo Peek hace precisamente eso. Devuelve el valor superior de la pila sin modificar la colecciรณn, lo cual es รบtil cuando quieres comprobar el siguiente elemento antes de decidir eliminarlo.
Paso 1) Crea una pila y agrega tres elementos a ella, de modo que el valor 3 quede en la parte superior.
Paso 2) Llama al mรฉtodo Peek para leer el elemento superior y, a continuaciรณn, comprueba la propiedad Count para confirmar que no se ha eliminado nada.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); Console.WriteLine(st.Peek()); Console.WriteLine(st.Count); Console.ReadKey(); } } }
Code Explicaciรณn:-
- Se declara una pila llamada st, y se agregan los valores 1, 2 y 3 con el mรฉtodo Push, de modo que 3 se convierte en el elemento superior.
- El mรฉtodo Peek devuelve el elemento superior sin eliminarlo, y la propiedad Count sigue informando del nรบmero total de elementos en la pila.
Cuando se ejecuta el programa, imprime el valor. 3 desde Peek y luego el recuento 3, lo que demuestra que el elemento permanece en la pila. Si la pila estรก vacรญa, Peek lanza una excepciรณn Invalid.OperationException, por lo que es seguro comprobar Count antes de llamarla.
Pila genรฉrica Cยช#
Los ejemplos anteriores utilizan la clase Stack no genรฉrica de System.Collections, que almacena cada elemento como un objeto. El cรณdigo C# moderno generalmente prefiere la clase Stack genรฉrica. Clase del espacio de nombres System.Collections.Generic. Vincula la pila a un รบnico tipo declarado, por lo que el compilador comprueba cada operaciรณn Push y Pop y no se necesita conversiรณn ni empaquetado.
Las principales ventajas de la pila genรฉrica se enumeran a continuaciรณn.
- Seguridad de tipos: El tipo se fija en la declaraciรณn, por lo que solo se pueden insertar valores de ese tipo, y los errores se detectan en tiempo de compilaciรณn.
- No se permite el boxeo: Los tipos de valor como int se almacenan directamente, lo que evita el coste de empaquetado que supone la pila no genรฉrica.
- El limpiador lee: Pop y Peek devuelven directamente el tipo declarado, por lo que no es necesario convertir el resultado de nuevo desde object.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { Stack<string> st = new Stack<string>(); st.Push("Java"); st.Push("Python"); Console.WriteLine(st.Pop()); Console.ReadKey(); } } }
En este ejemplo, la pila se declara como Stack , por lo que solo acepta valores de cadena. El mรฉtodo Pop devuelve una cadena directamente y la imprime. Python, el รบltimo valor insertado. Para cualquier proyecto nuevo, la pila genรฉrica es la opciรณn recomendada.
Diferencia entre pila y cola en C#
Una pila y una cola Ambas son colecciones que controlan el orden en que se eliminan los elementos, pero utilizan reglas opuestas. Una pila funciona segรบn el principio de รบltimo en entrar, primero en salir, mientras que una cola funciona segรบn el principio de primero en entrar, primero en salir. Elegir la correcta deja clara la intenciรณn del cรณdigo para otros desarrolladores.
Las principales diferencias se enumeran a continuaciรณn:
- Orden: Una pila elimina primero el elemento aรฑadido mรกs recientemente (LIFO), mientras que una cola elimina primero el elemento mรกs antiguo (FIFO).
- Mรฉtodos: Una pila utiliza Push y Pop, mientras que una cola utiliza Enqueue para agregar y Dequeue para eliminar.
- Acceso al elemento superior: Una pila lee su siguiente elemento con Peek, y una cola lee su siguiente elemento con Peek desde el frente.
- Usos tipicos: Las pilas se adaptan a las funciones de deshacer, la evaluaciรณn de expresiones y la recursiรณn. tracrey, mientras que las colas se adaptan a la programaciรณn, el almacenamiento en bรบfer y el recorrido en amplitud.
Ambos tipos estรกn disponibles en forma genรฉrica como Stack y cola en System.Collections.Generic, por lo que se obtiene seguridad de tipos con cualquiera de las dos opciones.




