jueves, 12 de noviembre de 2015

Colas en C# Estructura de datos

Colas

Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción se realiza por un extremo y la operación de extracción por el otro.

Elementos de una Cola:
Frente: Apunta al inicio de la cola y se incrementa cada vez que sale un elemento de la cola.

Atras: Apunta al último elemento que entro a la cola y se incrementa cada vez que ingresa un nuevo elemento.
Lacola[]: Es el vector de tamaño máximo que guardará los elementos de la cola.
maximo: Es el tamaño máximo de la cola o número de elementos que tendrá la cola.

Política:
“El primero que llega es el primero en salir.”

Operaciones de la cola:
cola_llena(): Regresa True si  atras=maximo y false en caso contrario.
cola_vacia(): Regresa true si frente=-1 y false en caso contrario
agregar_cola(): Agrega elemento a la cola.
del_cola(): Elimina un elemento de la cola.

Algoritmo de la clase Cola 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 cola_ejemplo

{
class colas
    {
        private int frente;
        private int atras;
        private int[] lacola;
        private int  maximo;

        public colas() { }
        public colas(int max)
        {
            frente = -1;
            atras = -1;
            maximo = max;
            lacola = new int[maximo];
        }

        public Boolean cola_llena()
        {
            if (atras == maximo-1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        public Boolean cola_vacia()
        {
            if (frente == -1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public void agregar_cola(int n)
        {
            if (cola_llena() == true)
            {
                MessageBox.Show("Cola llena");
            }
            else
            {
                atras++;
                lacola[atras]=n;
                if (atras == 0)
                {
                    frente = 0;
                }
            }
        }

        public int del_cola()
        {
            int n = -666;
            if (cola_vacia() == true)
            {
                MessageBox.Show("Cola vacia");
            }

            else
            {
                n = lacola[frente];
                if (frente == atras)
                {
                    frente = -1;
                    atras = -1;
                }
                else
                {
                    frente++;
                }
            }
            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 agregar se le cambio la propiedad name por btnagregar
-Al boton Eliminar se le cambio la propiedad name por btneliminar
-Al boton terminar se le cambio la propiedad name por btnterminar
-Al boton Crear se le cambio la propiedad name por btncrear

Código de la aplicación utilizando la clase colas:

namespace cola_ejemplo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        colas x = new colas();
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btncrear_Click(object sender, EventArgs e)
        {
            int n;
            n = int.Parse(txtmaximo.Text);
            x = new colas(n);
            MessageBox.Show("Cola creada");
        }

        private void btnagregar_Click(object sender, EventArgs e)
        {
            int n;
            n = int.Parse(txtnumero.Text);
            x.agregar_cola(n);
            MessageBox.Show("Valor agregado");
            txtnumero.Clear();
            txtnumero.Focus();
        }

        private void btneliminar_Click(object sender, EventArgs e)
        {
            int n;
            n = x.del_cola();
            if (n == -666)
            {
                MessageBox.Show("Cola sin valores");
            }
            else
            {
                MessageBox.Show("salio" + n);
            }
        }

        private void btnterminar_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

1 comentario: