lunes, 15 de abril de 2013

Pila Consola C#





//////////////////////////clase pila

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Pilas
{
    public class ClasePila
    {
        private readonly int Max;  // Tamaño de la pila
        private int Top;  // Cantidad de datos almacenados
        private int[] Arreglo;  // Arreglo de la pila

        // Constructor que recibe el Tamaño de la pila
        public ClasePila(int Tamaño)
        {
            Top = 0;  // Inicializa la pila vacía
            Max = Tamaño; // Define el tamaño de la pila
            Arreglo = new int[Tamaño];  // Crea el arreglo
        }

        // Método para determinar si la pila está llena
        private bool EstaLlena()
        {
            if (Top == Max)
                return (true);
            else
                return (false);
        }

        // Método para determinar si la pila está vacía
        private bool EstaVacia()
        {
            if (Top == 0)
                return (true);
            else
                return (false);
        }

        // Método para insertar un dato en la pila
        public bool Push(int dato)
        {
            if (!EstaLlena())  // Si no está llena ...
            {
                Arreglo[Top] = dato;  // Inserta el dato
                Top++;  // Incrementa la cantidad de datos almacenados
                return (true); // Dato insertado con éxito
            }
            else
                return (false);  // No se insertó el dato
        }

        // Método para eliminar el último dato insertado en la pila
        public bool Pop()
        {
            if (!EstaVacia())  // Si no está vacía ...
            {
                Top--;  // Disminuye la cantidad de datos almacenados
                return (true);  // Dato eliminado con éxito
            }
            else
                return (false);  // No se eliminó el dato
        }

        // Método para mostrar en pantalla los datos de la pila
        public string Mostrar()
        {
            string Resultado = "\n";  // Inicializa el resultado

            if (!EstaVacia())  // Si no está vacía ...
            {
                // Ciclo para recorrer el arreglo de la pila
                for (int i = 0; i <= Top - 1; i++)
                    Resultado = Resultado + "\n[" + i.ToString()+"] -> "+Arreglo[i].ToString();

                Resultado = Resultado + "\n\nTop = " + Top.ToString(); // Mostrar el Top
                Resultado = Resultado + "\nMax = " + Max.ToString();  // Mostrar el Max
            }
            else
                Resultado="\n\nPila vacía !!!";
            return (Resultado);  // Devolver el Resultado
        }

        // Método para eliminar todos los datos de la pila
        public void Vaciar()
        {
            // Se inicializa a cero la cantidad de elementos almacenados en la pila
            Top = 0;
        }
    }
}

///////////////////////program

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Pilas
{
    class Program
    {
        static ClasePila Pila = new ClasePila(10);   // Declaración del objeto de la Pila

            public static void Main(string[] args)
            {
                Int16 opcion = 0;
                do
                {
                    Console.Clear();
                    Console.WriteLine("P I L A S");
                    Console.WriteLine("\n1.- Insertar dato (PUSH)");
                    Console.WriteLine("2.- Eliminar dato (POP)");
                    Console.WriteLine("3.- Mostrar datos de la Pila");
                    Console.WriteLine("4.- Eliminar todos los datos de la Pila (VACIAR)");
                    Console.WriteLine("0.- Salir");
                    Console.Write("\n\nOpcion ? ");
                    opcion = Int16.Parse(Console.ReadLine());
                    switch (opcion)
                    {
                        case 1: InsertarEnPila(); break;
                        case 2: EliminarEnPila(); break;
                        case 3: MostrarDatos(); break;
                        case 4: VaciarPila(); break;
                    }
                } while (opcion != 0);
            }

            public static void InsertarEnPila()
            {
                int Dato = 0;
                Console.Clear();
                Console.WriteLine("INSERTAR DATO EN LA PILA");
                Console.Write("\nNúmero entero ? ");
                Dato = int.Parse(Console.ReadLine()); // Se captura el número que se desea insertar

                // Se ejecuta el método Push del objeto Pila
                if(Pila.Push(Dato))
                    Console.WriteLine("\nDato insertado en la pila !!!"); 
                else
                    Console.WriteLine("\nPila llena ...");

                Console.ReadKey();
            }

            public static void EliminarEnPila()
            {
                Console.Clear();
                Console.WriteLine("ELIMINAR El ÚLTIMO DATO ALMACENADO EN LA PILA");
                
                // Se ejecuta el método Push del objeto Pila
                if (Pila.Pop())
                    Console.WriteLine("\nDato eliminado de la pila !!!");
                else
                    Console.WriteLine("\nPila vacía ...");

                Console.ReadKey();
            }

            public static void MostrarDatos()
            {
                Console.Clear();
                Console.WriteLine("DATOS ALMACENADOS EN LA PILA");

                // Se ejecuta el método para mostrar los datos de la pila
                Console.WriteLine(Pila.Mostrar());

                Console.ReadKey();
            }

            public static void VaciarPila()
            {
                char sn;
                Console.Clear();
                Console.WriteLine("ELIMINAR TODOS LOS ELEMENTOS DE LA PILA (VACIAR)\n");

                // Solicita al usuario que confirme la operación
                do
                {
                    Console.Write("¿Está seguro que desea vaciar la pila [S/N] ?");
                    sn = char.Parse(Console.ReadLine());
                    sn = Char.ToUpper(sn);  // Convierte a mayúsculas el caracter capturado
                } while (sn != 'S' && sn != 'N');

                if (sn == 'S')
                {
                    Pila.Vaciar();  // Invoca el método correspondiente
                    Console.WriteLine("\n\nSe eliminaron todos los elementos de la pila !!!");
                    Console.ReadKey();
                }
            }
    }
}

No hay comentarios.:

Publicar un comentario

Es muy importante tu comentarios: