Busqueda

Resultados

jueves, 28 de enero de 2010

Estructuras de Datos Dinámicas

Son aquellas cuyo tamaño (longitud, número de elementos...) varía en tiempo de ejecución. Las más famosas son: Listas simplemente enlazadas (con y sin cabecera), Listas doblemente enlazadas (con y sin cabecera), Pilas, Colas, Árboles y Grafos.

Las Listas
Las listas son estructuras de datos que son dinámicas, esto significa que adquieren espacio y liberan espacio a medida que se necesita. sin embargo, hay una advertencia. Como regla general siempre hay que tener cuidado al manejar direcciones de espacios de memoria, porque es posible que accedamos a una localidad de memoria de la cual no deseabamos cambiar su contenido.

Las listas son estructuras de datos que son dinámicas, esto significa que adquieren espacio y liberan espacio a medida que se necesita. sin embargo, hay una advertencia. Como regla general siempre hay que tener cuidado al manejar direcciones de espacios de memoria, porque es posible que accedamos a una localidad de memoria de la cual no deseabamos cambiar su contenido.

Una lista es un conjunto de nodos que están relacionados. Cada nodo consta de dos partes:
- una donde se almacena la información,
- otra donde se guarda una referencia al siguiente nodo.

La creación de los nodos es dinámica, es decir, se crean nodos (por tanto se reserva memoria para ellos) según se van necesitando. Estos nodos finalmente estarán relacionados por un puntero que los enlaza. Ventaja: como creamos los nodos según los necesitamos, no necesitamos saber a priori la cantidad de datos que se van a manejar.

Sintaxis de un nodo:
Un nodo es una estructura donde se almacena la información y que además tiene una referencia al siguiente nodo:

struct nodo
{
struct nombre_estructura información;
struct nodo *siguiente;
}


Si cada nodo tiene sólo una referencia al nodo siguiente, se dice que la lista está enlazada de forma simple. Si cada nodo tiene dos referencias, una al nodo siguiente y otra al nodo anterior, se dice que la lista está doblemente enlazada.

/*Lista simple*/
está formado por nodos como el siguiente:
struct nodo_articulo
{
art info_articulo;
struct nodo_articulo *sig;
}

/*Lista doble*/
está formado por nodos como el siguiente:
struct nodo_articulo

{
art info_articulo;
struct nodo_articulo *sig;
struct nodo_articulo *ant;
}

Lista Simple


Lista doblemente enlazada


Además si el puntero del último elemento de la lista apunta al principio de la lista, se dice que la lista es circular. Cuando esto no ocurre, el puntero del último elemento de la lista debe tener el valor NULL. Este valor concreto representa que el puntero no está apuntando a ninguna dirección válida.

Lista Circular



Ejemplo: Supongamos que tenemos una aplicación para un registro de estudiantes. En este caso el ejemplo de nodo corresponde al estudiante que va a contener como subcampos la cédula, el nombre, el apellido, la edad y el. indice académico.

Definimos la estructura estudiante:
struct
estudiante
{
long cedula;
char *nombre;
char *apellido;
int edad;
float ia;
}

/*Definición de nodo en una lista simple*/
struct nodo_estudiante
{
struct estudiante info;
struct nodo_estudiante *sig;
}

/*Definición de nodo en una lista doblemente enlazada*/
struct nodo_estudiante
{
struct estudiante info;
struct nodo_estudiante *sig;
struct nodo_estudiante *ant;
}

Es importante tener siempre un puntero que referencie el principio de la lista, ya que si se pierde esa referencia se pierde el contenido de toda la lista.




No hay comentarios:

Publicar un comentario