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.





