domingo, 24 de noviembre de 2019

Taller con listas enlazadas

public class Nodo
    {
        private int dato;
        private Nodo siguiente;

        public int Dato
        {
            get { return dato; }
            set { dato = value; }
        }

        public Nodo Siguiente
        {
            get { return siguiente; }
            set { siguiente = value; }
        }
    }

class ValidarEnteros
    {
        public static void SoloEnteros(KeyPressEventArgs v)
        {
            if (char.IsDigit(v.KeyChar))
            {
                v.Handled = false;
            }
            else if (char.IsSeparator(v.KeyChar))
            {
                v.Handled = false;
            }
            else if (char.IsControl(v.KeyChar))
            {
                v.Handled = false;
            }
            else if (v.KeyChar.ToString().Equals(","))
            {
                v.Handled = true;
                MessageBox.Show("Solo se permiten números");
            }
            else if (v.KeyChar.ToString().Equals("."))
            {
                v.Handled = true;
                MessageBox.Show("Solo se permiten números");
            }
            else
            {
                v.Handled = true;
                MessageBox.Show("Solo se permiten números");
            }
        }
    }

Estas son las únicas dos clases utilizadas para la realización del ejercicio
Para las listas se utilizaron las listas de windows form porque eran más fáciles de manipular

namespace intercalandoListasDanielGarcia
{
    public partial class FrmEntrelazarVectores : Form
    {
        // se inician las listas con las que se va a trabajar inicialmente
        List<Nodo> Lista1 = new List<Nodo>();
        List<Nodo> Lista2 = new List<Nodo>();
        int tamanoVector = 0;
        int contador1 = 0;
        int contador2 = 0;
        public FrmEntrelazarVectores()
        {
            InitializeComponent();
        }

        private void BtnIngresarValorVector1_Click(object sender, EventArgs e)
        {
            tamanoVector = int.Parse(TxtCantElementos.Text);
            Nodo valor1 = new Nodo();
            valor1.Dato = int.Parse(TxtNumVector1.Text);
            if (contador1<=tamanoVector-1)
            {
                Lista1.Add(valor1);
                MessageBox.Show("Se ha guardado el dato");
                TxtNumVector1.Clear();
                contador1++;
            }
            else
            {
                MessageBox.Show("La lista ya está llena");
                TxtNumVector1.Clear();
                BtnIngresarValorVector1.Enabled = false;
            }
           
        }

        private void BtnIngresarValorVector2_Click(object sender, EventArgs e)
        {
            tamanoVector = int.Parse(TxtCantElementos.Text);
            Nodo valor2 = new Nodo();
            valor2.Dato = int.Parse(TxtNumVector2.Text);
            if (contador2 <= tamanoVector-1)
            {
                Lista2.Add(valor2);
                MessageBox.Show("Se ha guardado el dato");
                TxtNumVector2.Clear();
                contador2++;
            }
            else
            {
                MessageBox.Show("La lista ya está llena");
                TxtNumVector2.Clear();
                BtnIngresarValorVector2.Enabled = false;
            }
        }

        private void BtnMostrarLista1_Click(object sender, EventArgs e)
        {
            LvLista1.Items.Clear();
            foreach (Nodo valor1 in Lista1)
            {

                ListViewItem item = new ListViewItem();
                item = LvLista1.Items.Add(valor1.Dato.ToString());
            }
        }

        private void BtnMostrarLista2_Click(object sender, EventArgs e)
        {
            LvLista2.Items.Clear();
            foreach (Nodo valor2 in Lista2)
            {

                ListViewItem item = new ListViewItem();
                item = LvLista2.Items.Add(valor2.Dato.ToString());
            }
        }

        private void BtnMostrarVector_Click(object sender, EventArgs e)
        {
            //se pasan los datos de las dos listas a una tercera lista y se ordenan
            List<Nodo> Union = Lista1.Concat(Lista2).ToList();
            var Union1 = Union.OrderBy(s => s.Dato);
            foreach (var ord1 in Union1)
            {
                ListViewItem item = new ListViewItem();
                item = LvLista3.Items.Add(ord1.Dato.ToString());
            }
           
        }

        private void TxtCantElementos_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarEnteros.SoloEnteros(e);
        }

        private void TxtNumVector1_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarEnteros.SoloEnteros(e);
        }

        private void TxtNumVector2_KeyPress(object sender, KeyPressEventArgs e)
        {
            ValidarEnteros.SoloEnteros(e);
        }
    }
}

En la parte superior de la aplicación podemos encontrar 3 textbox donde el usuario debe ingresar los valores que corresponden para realizar el ejercicio, cada textbox tiene su etiqueta que da una idea de lo que se debe introducir en el cada textbox, además cada textbox tiene una validación que verifica que el usuario sólo ingrese números enteros.
A lado derecho de la aplicación se va a encontrar dos botones que son los encargados de ingresar los valores para llenar cada lista.
En la parte de la mitad nos encontramos con dos campos ListView, los cuáles se usan para mostrar los datos que se guardaron previamente al ingresar los valores para cada lista. Para mostrar los valores de cada lista se debe dar click en los botos que están a lado y lado de cada listView que son los encargados de llevar esos valores hasta los listView.
En la parte inferior, nos vamos a encontrar con un botón y un listView. Al apretar el botón, el usuario activa el código que lleva el botón que esta encargado de juntar las listas y ordenarlas en orden ascendente y en el lisView se puede ver el resultado de ese proceso.

  1. Ingresar la cantidad de elementos que va a tener cada fila
  2. Ingresar los valores de la fila 1
  3. Ingresar los valores de la fila 2
  4. Apretar el botón para ver la fila 1
  5. Apretar el botón para ver la fila 2
  6. Apretar el botón para ver la lista final.

No hay comentarios:

Publicar un comentario