Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


11.2. Una pila en C#

Para crear una pila, emplearemos la clase Stack. Una pila nos permitirá introducir un nuevo elemento en la cima ("apilar", en inglés "push") y quitar el elemento que hay en la cima ("desapilar", en inglés "pop").

Este tipo de estructuras se suele denotar también usando las siglas "LIFO" (Last In First Out: lo último en entrar es lo primero en salir).

Para utilizar la clase "Stack" y la mayoría de las que veremos en este tema, necesitamos incluir en nuestro programa una referencia a "System.Collections".

Así, un ejemplo básico que creara una pila, introdujera tres palabras y luego las volviera a mostrar sería:

// Ejemplo_11_02a.cs
// Ejemplo de clase "Stack" (Pila)
// Introducción a C#, por Nacho Cabanes

using System;
using System.Collections;

public class Ejemplo_11_02a  
{
    public static void Main()  
    {
        string palabra;

        Stack miPila = new Stack();
        miPila.Push("Hola,");
        miPila.Push("soy");
        miPila.Push("yo");

        for (byte i=0; i<3; i++) 
        {
            palabra = (string) miPila.Pop();
            Console.WriteLine( palabra );
        }
    }
}

cuyo resultado sería:

yo
soy
Hola,

Como se puede ver en este ejemplo, no hemos indicado que sea una "pila de strings", sino simplemente "una pila". Por eso, los datos que extraemos son "objetos", que deberemos convertir al tipo de datos que nos interese utilizando un "typecast" (conversión forzada de tipos), como en palabra = (string) miPila.Pop();

La implementación de una pila en C# es algo más avanzada que lo que podríamos esperar en una pila estándar: incorpora también métodos como:

Ejercicios propuestos:

Ejercicio propuesto 11.2.1: Crea un programa que pida al usuario 5 números enteros y luego los muestre en orden contrario, utilizando una pila.
Ejercicio propuesto 11.2.2: Crea un programa que pida al usuario el nombre de un fichero de texto y muestre en orden inverso las líneas que lo forman, empleando una pila.
Ejercicio propuesto 11.2.3: Crea una clase que imite el comportamiento de una pila, pero usando internamente un array (si no lo consigues, no te preocupes; en un apartado posterior veremos una forma de hacerlo).
Ejercicio propuesto 11.2.4: La "notación polaca inversa" es una forma de expresar operaciones que consiste en indicar los operandos antes del correspondiente operador. Por ejemplo, en vez de "3+4" se escribiría "3 4 +". Es una notación que no necesita paréntesis y que se puede resolver usando una pila: si se recibe un dato numérico, éste se guarda en la pila; si se recibe un operador, se obtienen los dos operandos que hay en la cima de la pila, se realiza la operación y se apila su resultado. El proceso termina cuando sólo hay un dato en la pila. Por ejemplo, "3 4 +" se convierte en: apilar 3, apilar 4, sacar dos datos y sumarlos, guardar 7, terminado. Impleméntalo y comprueba si el resultado de "3 4 6 5 - + * 6 +" es 21.