English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Stack (pila)

Stack es un tipo especial de colección que almacena elementos de manera LIFO (último en entrar, primero en salir). C# incluye la clase genérica Stack<T> y la clase de colección no genérica Stack. Se recomienda usar la colección genérica Stack<T>.

La pila es útil para almacenar temporalmente datos en forma LIFO y es posible que desee eliminarla después de recuperar el valor del elemento.

Características de Stack <T>

  • Stack<T> es una colección LIFO (último en entrar, primero en salir).  

  • Está en el espacio de nombres System.Collection.Generic.

  • Stack<T> puede contener elementos de tipos especificados. Proporciona comprobación de tipos en tiempo de compilación y no realiza empaquetado./Desempaquetado, porque es genérico.

  • Se puede usar el método Push() para agregar elementos. No se puede usar la inicialización de conjuntos porque es genérico.-sintaxis de inicializador)。

  • Se pueden recuperar elementos utilizando los métodos Pop() y Peek(). No admite índices.

Crear pila

Puede crear objetos especificando el tipo de elemento almacenado en Stack<T> mediante la especificación de un parámetro de tipo. El siguiente ejemplo crea y agrega elementos a Stack <T> usando el método Push(). La pila permite valores nulos (para tipos de referencia) y valores repetidos.

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
foreach (var item in myStack)
     Console.Write(item + "," //Imprimir4,3,2,1,

También puede crear una pila a partir de un array, como se muestra a continuación.

int[] arr = new int[]{ 1, 2, 3, 4};
Stack<int> myStack = new Stack<int>(arr);
foreach (var item in myStack)
     Console.Write(item + "," //Imprimir4,3,2,1,

Atributos y métodos de Stack <T>:

AtributoUso
CountDevuelve el total de elementos en la pila.
MétodoUso
Push(T)Insertar un elemento en la parte superior de la pila.
Peek()Devolver el elemento en la parte superior de la pila.
Pop()Eliminar y devolver el elemento en la parte superior de la pila.
Contains(T)Verificar si hay elementos en la pila.
Clear()Eliminar todos los elementos de la pila.

Pop()

El método Pop() devuelve el último elemento y lo elimina de la pila. Si la pila está vacía, lanzará una excepción de tipo InvalidOperationException. Por lo tanto, siempre verifique el número de elementos en la pila antes de llamar al método Pop().

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
Console.Write("Número de elementos en la pila: {0}", myStack.Count);
while (myStack.Count > 0)
     Console.Write(myStack.Pop(), + ","
Console.Write("Número de elementos en la pila: {0}", myStack.Count);
Salida:
Número de elementos en la pila:4
4,3,2,1,
Número de elementos en la pila: 0

Peek()

El método Peek() devuelve el valor último agregado en la pila, pero no lo elimina. Llamar al método Peek() en una pila vacía lanzará una excepción de tipo InvalidOperationException. Por lo tanto, siempre verifique los elementos en la pila antes de buscar elementos con el método Peek().

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
Console.Write("Número de elementos en la pila: {0}", myStack.Count);// Salida 4
if(myStack.Count > 0){
     Console.WriteLine(myStack.Peek()); // Salida 4
     Console.WriteLine(myStack.Peek()); // Salida 4
}
Console.Write("Número de elementos en la pila: {0}", myStack.Count);// Salida 4

Contains()

El método Contains() verifica si el elemento especificado existe en la colección Stack. Si existe, devuelve true, de lo contrario devuelve false.

Stack<int> myStack = new Stack<int>();
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
myStack.Push(4);
myStack.Contains(2); // Devolver true
myStack.Contains(10); // Devolver false