lunes, 16 de noviembre de 2015

LISTAS

Listas

Una lista es una estructura de datos secuencial.
Una manera de clasificarlas es por la forma de acceder al siguiente elemento:
- lista densa: la propia estructura determina cuál es el siguiente elemento de la lista. Ejemplo: un array.


- lista enlazada: la posición del siguiente elemento de la estructura la determina el elemento actual. Es necesario almacenar al menos la posición de memoria del primer elemento. Además es dinámica, es decir, su tamaño cambia durante la ejecución del programa.

Una lista enlazada se puede definir recursivamente de la siguiente manera:
- una lista enlazada es una estructura vacía o


- un elemento de información y un enlace hacia una lista (un nodo).

Gráficamente se suele representar así:


Como se ha dicho anteriormente, pueden cambiar de tamaño, pero su ventaja fundamental es que son flexibles a la hora de reorganizar sus elementos; a cambio se ha de pagar una mayor lentitud a la hora de acceder a cualquier elemento.
En la lista de la figura anterior se puede observar que hay dos elementos de información, x e y. Supongamos que queremos añadir un nuevo nodo, con la información p, al comienzo de la lista. Para hacerlo basta con crear ese nodo, introducir la información p, y hacer un enlace hacia el siguiente nodo, que en este caso contiene la información x. 


¿Qué ocurre si quisiéramos hacer lo mismo sobre un array?. En ese caso sería necesario desplazar todos los elementos de información "hacia la derecha", para poder introducir el nuevo elemento, una operación muy engorrosa.




La sintaxis para crear una colección list‹T› es la siguiente:
List‹tipo› nombre = new List‹tipo›();
ArrayList es un objeto creado de una manera similar, aunque sin el argumento de tipo:
ArrayList nombre = new ArrayList ();

Con esta sintaxis ahora podemos crear una list‹T› denominada listacolores:
using System;
using System.Collections.Generic;


public class Lists
{
static void Main()
{
List‹string› listacolores = new List‹string›();
}
}



Ejemplo:


List<List<string>> almacen = new List<List<string>>();

// Ahora vas rellenando los datos en las sucesivas listas
List<string> datos1 = new List<string>();
datos1.Add("D1 - nombre");
datos1.Add("D1 - direccion");
etc... para la lista datos1

// Se inserta la lista datos1 en la lista de listas almacen
almacen.Add(datos1);

// Ahora para recuperar algun dato:
List<string> datos1 = almacen[0]; // esta es la primera <lista> de la <lista de listas>
string nombre= datos1[0]; // Este es el primer valor de la lista anterior
MessageBox.Show("El primer dato de la primera lista es: " + nombre);

Cuando entiendes el proceso ya lo puedes hacer de una vez, por ejemplo adoptando tu nomenclatura:
MessageBox.Show("El primer dato de la primera lista es: " + Listas_de_Nombres[0][0]);
siendo: Listas_de_Nombres[0] la primera <lista> de la <lista de listas>
siendo Listas_de_Nombres[0][0] el primer nombre de la primera <lista> de la <lista de listas>

No hay comentarios:

Publicar un comentario