jueves, 12 de noviembre de 2015

Listas en C# Estructura de datos

Listas

Es una estructura  de datos Lineal y dinámica, es decir aumenta o disminuye su tamaño en tiempo de ejecución y puede ser usada para implementar otras estructuras de datos.

Política:
La lista como tal no tiene una política pero puede tenerla cuando se comporta como pila dinámica o como cola dinámica adoptando la política según sea el caso.

Algunas Operaciones de las listas:
add: Agrega elementos a la lista
insert: Inserta un valor a la lista en una posición, insert(posicion,valor)
Remove: Remueve el primer valor que coincida con el que desea eliminar el usuario.
RemoveAt(posicion): Remueve el elemento de la lista de posición especificada

Programa en c#

Se creo la aplicación con el siguiente diseño:
Se les cambio la propiedad "name" a los Button TextBox  y ala ListBox:
-Al TextBox que esta a la derecha de donde dice valor a agregar se le puso en la propiedad name txtvalor
-Al boton agregar se le cambio la propiedad name por btnagregar
-Al boton Insertar se le cambio la propiedad name por btninsertar
-Al boton Eliminar De se le cambio la propiedad name por btneliminarde
-Al boton Eliminar se le cambio la propiedad name por btneliminar
-Al boton Mostrar se le cambio la propiedad name por btnamostrar
-Al TextBox que esta abajode donde dice Posicion se le puso en la propiedad name txtposicion
-A la ListBox se le cambio la propiedad name por Liver

Codigo:

namespace Listas_ejemplo
{
    public partial class Form1 : Form
    {
        List<int> Milista = new List<int>(); //Creamos la variable de tipo lista
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btnagregar_Click(object sender, EventArgs e)
        {
            int n;
            n = int.Parse(txtvalor.Text);
            Milista.Add(n);// Add sirve para añadir al final de la lista
            txtvalor.Clear();
            txtvalor.Focus();
        }

        private void btninsertar_Click(object sender, EventArgs e)
        {
            int n,pos;
            n = int.Parse(txtvalor.Text);
            pos = int.Parse(txtposicion.Text);
            Milista.Insert(pos, n);//inserte agrega un valor en una posicion especifica
        }

        private void btnmostrar_Click(object sender, EventArgs e)
        {
            int i;
            //count nos dice cuantos valores se han agregado ala lista
            Liver.Items.Clear();//borra el contenido del ListBox
            for (i = 0; i <= Milista.Count - 1; i++)
            {
                Liver.Items.Add(Milista.ElementAt(i));//ElementAt Agrega un elemento en la posicion especificada
            }

        }

        private void btneliminarde_Click(object sender, EventArgs e)
        {
            int pos;
            pos = int.Parse(txtposicion.Text);
            Milista.RemoveAt(pos);//RemoveAt elimina un elemento de la lista de la posicion especificada
        }

        private void btneliminar_Click(object sender, EventArgs e)
        {
            //Remove Elimina de la lista el primer elemento que encuentre de un valor especificado
            int n;
            n = int.Parse(txtvalor.Text);
            Milista.Remove(n);
        }
    }
}

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();
        }
    }
}

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);
        }
    }
}