Está en la página 1de 10

ESTRUTURA DINAMICA LISTA

Una lista es una estructura de datos secuencial. lista enlazada: la posicin del siguiente elemento de la estructura la determina el elemento actual. Es necesario almacenar al menos la posicin de memoria del primer elemento. Adems es dinmica, es decir, su tamao cambia durante la ejecucin del programa. Una lista enlazada se puede definir recursivamente de la siguiente manera: - una lista enlazada es una estructura vaca o - un elemento de informacin y un enlace hacia una lista (un nodo).

IPLEMENTACION Para representar en lenguaje C esta estructura de datos se utilizarn punteros, un tipo de datos que suministra el lenguaje. Se representar una lista vaca con la constante NULL struct cl { char nombre[20]; int edad; }; struct lista { struct cl datos; int clave; struct lista *sig; };

struct lista { int clave; struct lista *sig; };

Cuando se crea una lista debe estar vaca. Por tanto para crearla se hace lo siguiente: struct lista *L; L = NULL;

Operaciones bsicas sobre listas


Insercin al comienzo de una lista: Es necesario utilizar una variable auxiliar, que se utiliza para crear el nuevo nodo mediante la reserva de memoria y asignacin de la clave. Posteriormente es necesario reorganizar los enlaces, es decir, el nuevo nodo debe apuntar al que era el primer elemento de la lista y a su vez debe pasar a ser el primer elemento. En el siguiente ejemplo se muestra un programa que crea una lista con cuatro nmeros. Notar que al introducir al comienzo de la lista, los elementos quedan ordenados en sentido inverso al de su llegada. Notar tambin que se ha utilizado un puntero auxiliar p para mantener correctamente los enlaces dentro de la lista. #include <stdlib.h>
struct lista { int clave; struct lista *sig; }; int main(void) { struct lista *L; struct lista *p; int i; L = NULL; /* Crea una lista vacia */ for (i = 4; i >= 1; i--) { /* Reserva memoria para un nodo */ p = (struct lista *) malloc(sizeof(struct lista)); p->clave = i; /* Introduce la informacion */ p->sig = L; /* reorganiza */ L = p; /* los enlaces */ } return 0; }

#include <stdio.h> #include <stdlib.h> struct lista { int clave; struct lista *sig; }; /* prototipo */ void insertar(struct lista **L, int elem); int main(void) { struct lista *L; L = NULL; /* Lista vacia */ /* para probar la insercion se han tomado 3 elementos */ insertar(&L, 0); insertar(&L, 1); insertar(&L, -1); return 0; } void insertar(struct lista **L, int elem) { struct lista *actual, *anterior, *nuevo; /* 1.- se busca su posicion */ anterior = actual = *L; while (actual != NULL && actual->clave < elem) { anterior = actual; actual = actual->sig; } /* 2.- se crea el nodo */ nuevo = (struct lista *) malloc(sizeof(struct lista)); nuevo->clave = elem; /* 3.- Se enlaza */ if (anterior == NULL || anterior == actual) { /* inserta al principio */ nuevo->sig = anterior; *L = nuevo; /* importante: al insertar al principio actuliza la cabecera */ } else { /* inserta entre medias o al final */ nuevo->sig = actual; anterior->sig = nuevo; } }