Listas_Enlazadas

download Listas_Enlazadas

of 12

description

Estructura de datos

Transcript of Listas_Enlazadas

Diapositiva 1

1Por: Ing. Oswaldo Basurto G.LISTAS ENLAZADAS UNEDSModalidad de Estudios SemipresencialTUTOR: Ing. Oswaldo Basurto G. MscEstructura de Datos2Por: Ing. Oswaldo Basurto G.Las estructuras dinmicas nos permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse nuestros programas.

Las estructuras de datos estn compuestas de otras pequeas estructuras a las que llamaremos nodos o elementos, que agrupan los datos con los que trabajar nuestro programa y adems uno o ms punteros autoreferenciales, es decir, punteros a objetos del mismo tipo.Dentro de los datos de este tipo podemos hablar de:Listas.Pilas.Colasrboles.GrafosEstructuras Dinmicas de DatosEstructura de Datos3Por: Ing. Oswaldo Basurto G.Una lista lineal enlazada es un conjunto de elementos u objetos de cualquier tipo, originariamente vaca que, durante la ejecucin del programa va creciendo o decreciendo elemento a elemento segn las necesidades previstas.

En una lista lineal cada elemento apunta al siguiente, es decir, cada nodo tiene informacin de dnde est el siguiente. Por este motivo tambin se le llama lista enlazada.Listas Enlazadas

Estructura de Datos4Por: Ing. Oswaldo Basurto G.La forma ms simple de estructura dinmica es la lista simplemente enlazada o lista abierta.Cada elemento (nodo) slo dispone de un puntero, que apuntar al siguiente elemento de la lista o valdr NULL si es el ltimo elemento. Slo se pueden recorrer hacia delante.En esta forma los nodos se organizan de modo que cada uno apunta al siguiente, y el ltimo no apunta a nada, es decir, el puntero del nodo siguiente vale NULL.Para crear un alista debemos definir la clase de elementos que van a formar parte de la misma. Un tipo de dato genrico podra ser:

struct nodo{ int dato; struct nodo *sig;};Listas EnlazadasEstructura de Datos5Por: Ing. Oswaldo Basurto G.Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est vaca:*pNodo = NULL; /* lista vaca */Inicialmente *sig apunta a NULL. Lo representamos grficamente en la forma:Listas Enlazadas

Estructura de Datos6Por: Ing. Oswaldo Basurto G.Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est vaca:*pNodo = NULL; /* lista vaca */Inicialmente *sig apunta a NULL. Lo representamos grficamente en la forma:Listas Enlazadas

Estructura de Datos7Por: Ing. Oswaldo Basurto G.Operaciones bsicas con listas:Con las listas se pueden realizar las siguientes operaciones bsicas:Crear listaAadir o insertar elementosBuscar o localizar elementos.Borrar elementos.Moverse a travs de una lista.Ordenar una lista.

Cada una de estas operaciones tendr varios casos especiales, por ejemplo, no ser lo mismo insertar un nodo en una lista vaca, o al principio de una lista no vaca, o al final, o en una posicin intermedia.Listas EnlazadasEstructura de Datos8Por: Ing. Oswaldo Basurto G.a) Crear Lista.Si queremos crear una lista, podemos emplear la tcnica de reservar memoria dinmicamente. Para ello escribimos una funcin llamada insertar:La funcin principal tomar la forma:void main(void){struct elemento *p; //puntero a un nodo c = NULL; /* lista vaca *//* Reserva dinmica de memoria */p = nuevo_elemento(); /* p apunta al nodo recin creado */ p->sig = NULL; /* fin de lista *//* operaciones. . *//* Liberacin de memoria reservada */ delete (p) /* en compilador de C++ *//* free(p); en el compilador de C */}Listas Enlazadas

Estructura de Datos9Por: Ing. Oswaldo Basurto G.b) Aadir o insertar elementos en una lista enlazada:Veremos primero los casos sencillos y finalmente construiremos un algoritmo genrico para la insercin de elementos en una lista.Insertar un elemento en una lista vaca:

Este es el caso ms sencillo. Equivale a crear una lista, como en el caso a). Partiremos de que ya tenemos el nodo a insertar (creado en la llamada a la funcin nuevo_elemento() y, por supuesto un puntero que apunte a l, adems el puntero a la lista valdr NULL:El proceso es muy simple, bastar con que:nodo->sig apunte a NULLLista apunte a nodoListas Enlazadas

Estructura de Datos10Por: Ing. Oswaldo Basurto G.b) Aadir o insertar elementos en una lista enlazada:Veremos primero los casos sencillos y finalmente construiremos un algoritmo genrico para la insercin de elementos en una lista.Insertar un elemento en una lista vaca:

Este es el caso ms sencillo. Equivale a crear una lista, como en el caso a). Partiremos de que ya tenemos el nodo a insertar (creado en la llamada a la funcin nuevo_elemento() y, por supuesto un puntero que apunte a l, adems el puntero a la lista valdr NULL:El proceso es muy simple, bastar con que:nodo->sig apunte a NULLLista apunte a nodoListas Enlazadas

Estructura de Datos11Por: Ing. Oswaldo Basurto G.Insertar un elemento en la primera posicin de una lista:Podemos considerar el caso anterior como un caso particular de ste, la nica diferencia es que en el caso anterior la lista es una lista vaca, pero siempre podemos, y debemos considerar una lista vaca como una lista.Por tanto, ahora la lista ya existe.

De nuevo partiremos de un nodo a insertar, con un puntero que apunte a l ( p ), y de una lista, en este caso no vaca, apuntada por cabeza o lista:

El proceso es el siguiente:

Hacemos que nodo->sig apunte a ListaHacemos que Lista apunte a nodo

Listas Enlazadas

Estructura de Datos12Por: Ing. Oswaldo Basurto G.Insertar un elemento en la primera posicin de una lista:Podemos considerar el caso anterior como un caso particular de ste, la nica diferencia es que en el caso anterior la lista es una lista vaca, pero siempre podemos, y debemos considerar una lista vaca como una lista.Por tanto, ahora la lista ya existe.

De nuevo partiremos de un nodo a insertar, con un puntero que apunte a l ( p ), y de una lista, en este caso no vaca, apuntada por cabeza o lista:

El proceso es el siguiente:

Hacemos que nodo->sig apunte a ListaHacemos que Lista apunte a nodo

Listas Enlazadas

Estructura de Datos