jueves, 12 de noviembre de 2015

Pila en C# Estructura de datos

Pila

Una pila representa una estructura lineal de datos en la que se puede agregar o quitar elementos únicamente por uno de los dos extremos y puede implementarse de manera estática o dinámica.

Elementos de una pila:
Vector: Es donde se colocaran los elementos de la pila.
Máximo: Indicara el tamaño de la pila.
Cima: Apuntara al último elemento que entro a la pila.


Política:
"El ultimo que llega es el primero que  sale".

Operaciones de una pila:
Pila_llena: Regresa cierto si la cima es igual a máximo y regresa falso si cima es diferente de máximo.
Pila_vacia: Regresa cierto si la cima es -1 en caso contrario regresa falso.
Push: Agregar elementos a la pila
Pop: Sacar elementos de la pila

Algoritmo de la clase pila programado en C#

using System;
using System.Windows.Forms;
//en la parte de using System; se pone esta línea para poder usar los MessageBox.Show("");

namespace PilaEjemplo
{
class Pilas
    {
        private int maximo;
        private int cima;
        private int[] lapila;

        public Pilas() { }

        public Pilas(int max)
        {
            lapila = new int[max];
            maximo = max;
            cima = -1;
        }

        public Boolean pila_llena()
        {
            if (cima == maximo-1)
            { return true; }

            else
            { return false; }

        }

        public Boolean pila_vacia()
        {
            if (cima == -1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void push(int n)
        {
            if (pila_llena() == true)
            {
                MessageBox.Show("Pila llena");
            }

            else
            {
                cima++; lapila[cima] = n;
            }
        }

        public int pop()
        {
            int n = 0;
            if (pila_vacia() == true)
            {
                MessageBox.Show("Pila vacia");
                return n;
            }

            else
            {
                n = lapila[cima];
                cima--;
                return n;
            }
        }
    }
}

Ejemplo:

Se creo una aplicación con el siguiente diseño:
Se les cambio la propiedad "name" a los Button y TextBox 

-Al TextBox que esta a la derecha de donde dice Maximo se le puso en la propiedad name txtmaximo
-Al TextBox que esta a la derecha de donde dice Numero se le puso en la propiedad name txtnumero
-Al boton Push se le cambio la propiedad name por btnpush
-Al boton Pop se le cambio la propiedad name por btnpop
-Al boton Crear se le cambio la propiedad name por btncrear

Código de la aplicación usando la clase pilas:

namespace PilaEjemplo
{
    public partial class Form1 : Form
    {
        Pilas objeto = new Pilas();

        public Form1()
        {
            InitializeComponent();
        }

        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btncrear_Click(object sender, EventArgs e)
        {
            int m = int.Parse(txtmaximo.Text);
            objeto = new Pilas(m);
            MessageBox.Show("Pila Creada");
        }

        private void btnpush_Click(object sender, EventArgs e)
        {
            int n = int.Parse(txtnumero.Text);
            objeto.push(n);
            txtnumero.Clear();
            txtnumero.Focus();
        }

        private void btnpop_Click(object sender, EventArgs e)
        {
            int n;
            n = objeto.pop();
            MessageBox.Show("Salio:" + n);
        }
    }
}

1 comentario: