Sie sind auf Seite 1von 72

UNIDAD V

Listas enlazadas.

CONTENIDO
Objetivos especficos. Bibliografa recomendada. Introduccin. Listas enlazadas. Concepto. Estructura de un nodo. Clasificacin de las listas. Ventajas.

CONTENIDO
Operaciones sobre las listas. Operaciones sobre las listas simplemente enlazadas lineales. Operaciones sobre las listas simplemente enlazadas circulares. Operaciones sobre las listas doblemente enlazadas lineales.

CONTENIDO
Operaciones sobre las listas doblemente enlazadas circulares. Aplicaciones.

OBJETIVOS ESPECIFICOS

BIBLIOGRAFIA RECOMENDADA
Cair Osvaldo & Guardati Silvia. Estructuras de datos. 2001. Editorial Mc Graw Hill. Pp 139-167. Aguilar Joyanes. Programacin en C++. 2000. Editorial Mc Graw Hill. Pp 369-380. Zimerman Heilleman. Estructuras de datos. . Editorial Mc Graw Hill. Pp 83-104.

BIBLIOGRAFIA RECOMENDADA
Aguilar Joyanes & Zahonero Ignacio. Programacin en C. Libro de Problemas. 2002. Editorial Mc Graw Hill. Pp 257-292. Aguilar Joyanes & Zahonero Ignacio. Estructuras de datos. Libro de Problemas. 1999. Editorial Mc Graw Hill. 87-127.

BIBLIOGRAFIA RECOMENDADA
Villalobo Jorge. Diseo y manejo de estructuras de datos en C. 1996. Editorial Mc Graw Hill. Pp 85119. Susan Nell. Estructuras de datos. 1994. Editorial Mc Graw Hill. 229-355

INTRODUCCIN
Las estructuras de datos presentadas hasta el momento (estructuras, pilas y colas) se denominan estticas. Reciben este este nombre debido a que durante la compilacin se les asigna espacio de memoria, y ste permanece inalterable a lo largo de la ejecucin del programa, es decir, las variables no pueden crearse ni destruirse durante la ejecucin del programa.

INTRODUCCIN
En esta unidad se introduce un nuevo concepto, el de estructuras dinmicas de datos. Este tipo de estructura es generado a partir de un tipo de dato conocido con el nombre de puntero. La principal ventaja de manejar este tipo de dato es que se puede adquirir posiciones de memoria a medida que se necesitan, y liberarlas cuando ya no se requieren. De esta manera es posible crear estructuras dinmicas que se expandan o contraigan, segn se les agreguen o eliminen elementos.

LISTAS ENLAZADAS
Es una coleccin generalmente nodos. de elementos llamados

ESTRUCTURA DE UN NODO
Informacin. Siguiente.

ESTRUCTURA DE UN NODO
La fig 5.1 representa un ejemplo de una lista que almacena apellidos.

Garca P

Prez

Lpez

Santos NULL

CLASIFICACIN DE LAS LISTAS


Listas simplemente enlazadas. Lineales. Circulares. Listas doblemente enlazadas. Lineales. Circulares.

VENTAJAS
Uso eficiente de recurso memoria. No requiere reordenamiento o desplazamiento de dato.

OPERACIONES SOBRE LAS LISTAS


Insercin. Eliminacin. Bsqueda. Recorrido e impresin.

LISTAS SIMPLEMENTE ENLAZADAS LINEALES

INSERCIN DE UN ELEMENTO
Al inicio de la lista. Al final de la lista. Antes/despus que otro.

INSERTAR AL INICIO DE UNA LISTA


InsertaInicio(P,DATO) Declarar Q como puntero a nodo 1. Crear(Q) 2. Hacer Q^.Info=DATO 3. Q^.Sig=P 4. P=Q 5. Fin del algoritmo InsertaInicio

INSERTAR AL FINAL DE UNA LISTA


InsertaFinal(P,DATO) Declarar T de tipo puntero a nodo 1.Crear(Q) 2.Q^.Info=DATO 3.Q^.Sig=NULL 4.Si (P=NULL) entonces

P=Q En caso contrario T=P 4.1 Repetir mientras T^.Sig<>NULL

INSERTAR UN NODO ANTES QUE OTRO


INSERTANTES(P,DATO,REF) Declarar Q, X y T punteros a nodo, BAND es una variable de ti booleano 1. Hacer Q=P y BAND =Verdadero 2. Repetir mientras Q^.Info<>REF Y BAND=Verdadero 2.1 Si Q^.Sig <>NULL entonces Hacer T=Q y Q = Q^.Sig Si no Hacer BAND=Falso 2.2 Fin del condicional 2.1

INSERTAR UN NODO DESPUS QUE OTRO


INSERTADESPUES(P,DATO,REF) Declarar Q, X punteros a nodo. BAND es una variable de tipo booleano 1. Hacer Q=P y BAND =Verdadero 2. Repetir mientras Q^.Info<>REF Y Band=Verdadero 2.1 Si Q^.Sig <>NULL entonces Hacer Q=Q ^.Sig Si no Hacer BAND=Falso 2.2 Fin del condicional 2.1 3. Fin del ciclo del paso 2

ELIMINACIN DE UN ELEMENTO
Al inicio de la lista. Al final de la lista. Antes/Despus de un nodo dado como referencia. Nodo con informacin.

ELIMINAR EL PRIMER NODO DE UNA LISTA


ELIMINARPRIMERO(P) Declarar Q punteros a nodo 1. Hacer Q=P {Verifica si la lista tiene slo un nodo} 2. Si Q^.Sig<>NULL Entonces Hacer P=Q^.Sig {Redefine el puntero al inicio} Si no Hacer P=NULL 3. Fin del condicional del paso 2

ELIMINAR EL LTIMO NODO DE LA LISTA


ELIMINALTIMO(P) Declarar Q y T punteros a nodo {Verifica si la lista tiene slo un elemento } 1. Si (P^.Sig=NULL) entonces Quita(P), P=NULL Si no Q =P 1.1. Repetir mientras(Q^.Sig<>NULL) T=Q

ELIMINAR UN NODO CON INFORMACIN


ELIMINAX(P,X) {Este algoritmo elimina un nodo con informacin X de una lista simplemente enlazada lineal. P es el apuntador al inicio de la lista} {Q y T son variables de tipo puntero. Band es una variable de tipo booleano} 1. Hacer Q=P y Band =Verdadero 2. Repetir mientras Q^.Info<>X y Band=verdadero 2.1. Si Q^.Sig<>NULL entonces Hacer T=Q Q =Q^.Sig Si no

ELIMINAR EL NODO ANTERIOR AL NODO CON INFORMACIN X


ELIMINANTESX (P,X) Declarar Q, T y R punteros a nodo. Band es una variable de tipo booleano} 1. Si P^.Info=X entonces Escribir No hay nodo que preceda a X Si no Hacer Q=P , T =P y Band =Verdadero 1.1. Repetir mientras Q^.Info<>X y Band=Verdadero 1.1.1. Si Q^.Sig<>NULL entonces Hacer R=T, T =Q y Q =Q^.Sig

BSQUEDA
En una lista ordenada. En una lista desordenada.

BUSQUEDA DE UN ELEMENTO EN UNA LISTA DESORDENADA


BUSCADESORDENADA(P,X) Declarar Q puntero a nodo 1. Hacer Q=P 2. Repetir mientras Q<>NIL y Q^.Info<>X Hacer Q =Q^.Sig 3. Fin del ciclo del paso 2 4. Si Q=NIL entonces Escribir El elemento no fue encontrado Si no

BUSQUEDA DE UN ELEMENTO EN UNA LISTA ORDENADA


BUSCAORDENADA(P,X) {Este algoritmo busca el nodo con informacin X en una lista simplemente enlazada ordenada. P es el apuntador al inicio de la lista} {Q es una variable de tipo puntero} 1. Hacer Q=P 2. Repetir mientras QNIL y Q^.Info<X Hacer Q Q^.Sig 3. Fin del ciclo del paso 2

LISTAS SIMPLEMENTE ENLAZADAS CIRCULARES


Las listas circulares tienen la caracterstica de que el ltimo elemento de la misma apunta al primero.

P Garca Prez Lpez Santos

INSERTAR AL INICIO
INSERTAINICIO(P,DATO) {Este algoritmo inserta un nodo al principio de una lista simplemente enlazada circular. P es el apuntador al inicio de la lista y DATOS es el valor que se almacenar en el nuevo nodo} {Q es una variable de tipo puntero} 1. Crear(Q) 2. Hacer Q^.Info=DATO, 3. Si P=NIL entonces P=Q, Q^.Sig = P Si no

INSERTAR AL FINAL
INSERTAFINAL(P,DATO) {Este algoritmo inserta un nodo al final de una lista simplemente enlazada circular. P es el apuntador al primer nodo de la lista, y DATO es la informacin que se almacenar en el nuevo nodo} {Q es una variable de tipo puntero} 1. Crear(Q) 2. Hacer Q^.Info=DATO, 3. Si P=NIL entonces P=Q, Q^.Sig = P Si no

INSERTAR ANTES DE UN NODO DADO

INSERTAR DESPUS DE UN NODO DADO

ELIMINAR EL PRIMER NODO

ELIMINAR EL LTIMO NODO

ELIMINAR UN NODO CON INFORMACIN

ELIMINAR UN NODO ANTES DE UN NODO DADO

ELIMINAR UN NODO DESPUS DE UN NODO DADO

LISTAS DOBLEMENTE ENLAZADAS


Una lista doblemente enlazada es una coleccin de nodos, en la cual cada nodo tiene dos punteros. Uno de ello apuntando a su predecesor (Izq) y el otro a su sucesor (Der).
P Garca NIL Prez Lpez Santos NIL F

OPERACIONES CON LISTAS DOBLEMENTE ENLAZADA


Insercin de un elemento Eliminacin de un elemento. Recorrido e impresin en listas.

RECORRIDO E IMPRESIN DE LA LISTA


Al tener doble enlace, la lista puede recorrerse tanto de inicio al final (tomando el enlace del puntero Der), como en sentido inverso (tomando el enlace izquierdo).

RECORRIDO E IMPRESIN DE LA LISTA

INSERCIN DE UN ELEMENTO
Al inicio de la lista. Al final de la lista. Antes/despus de un nodo dado como referencia

INSERTAR AL INICIO DE LA LISTA


INSERTAPRINCIPIO(P,DATO) {Este algoritmo inserta un nodo al inicio de una lista doblemente enlazada lineal. P es el apuntador al primer nodo de la lista y DATO es la informacin que se almacenar en el nuevo nodo} {Q es una variable de tipo puntero} 1. Crear(Q) 2. Hacer Q^.Info=DATO, Q^.Der =P, P^.Izq =Q Q^.Izq =NIL y P =Q

INSERTAR AL FINAL DE LA LISTA


INSERTAFINAL(F,DATO) {Este algoritmo inserta un nodo al final de una lista doblemente enlazada lineal. F es el apuntador al ltimo nodo de la lista y DATO es la informacin que se almacenar en el nuevo nodo} {Q es una variable de tipo puntero} 1. Crear(Q) 2. Hacer Q^.Info=DATO, F^.Der =Q, Q^.Izq =F Q^.Der =NIL y F =Q

INSERTAR UN NODO ANTES QUE OTRO DADO COMO REFERENCIA


INSERTANTES(P,DATO,REF) {Este algoritmo inserta un nodo antes de otro dado como referencia, REF. P es el apuntador al primer nodo de la lista, y DATO es la informacin que se almacenar en el nuevo nodo} 1. Hacer T=P 2. Repetir mientras T^.Der<>NIL y T^.Info<>REF Hacer T =T^.Der 3. Fin del ciclo del paso 2 4. Si T^.Info=REF entonces

INSERTAR UN NODO DESPUS QUE OTRO DADO COMO REFERENCIA

ELIMINACIN DE UN ELEMENTO
Al inicio de la lista. Al final de la lista. Antes/despus de un nodo dado como referencia. Un nodo con informacin.

ELIMINA EL PRIMER NODO DE LA LISTA ELIMINAPRIMER(P,F)


{Este algoritmo elimina el primer elemento de una lista. P y F son los apuntadores al primer y ltimo nodo de la lista respectivamente} {Q es una variable de tipo puntero} 1. Hacer QP 2. Si Q^.Der NIL entonces {Verifica si la lista tiene un slo elemento} Hacer P Q^.Der y P^.IZQ NIL

ELIMINA EL PRIMER NODO DE LA LISTA


Si no Hacer P NIL y F NIL 3. Fin del condicional del paso 2 4. Quitar(Q)

ELIMINA EL LTIMO NODO DE LA LISTA


ELIMINALTIMO(P,F)
{Este algoritmo elimina el ltimo elemento de una lista. P y F son los apuntadores al primer y ltimo nodo de la lista respectivamente} {Q es una variable de tipo puntero}

1. Hacer Q F 2. Si Q^.IZQ NIL entonces


{Verifica si la lista tiene un solo elemento}

Hacer F Q^.IZQ y F^.DER NIL

ELIMINA EL LTIMO NODO DE LA LISTA


Si no Hacer F NIL y P NIL 3. Fin del condicional del paso 2 4. Quitar(Q)

ELIMINA UN NODO CON INFORMACIN X


ELIMINAX(P,F,X)
{Este algoritmo elimina el nodo con informacin X. P y F son los apuntadores al primer y ltimo nodo de la lista respectivamente} {Q, T y R son variables de tipo puntero }

1. Hacer Q P 2. Repetir mientras Q^.DER NIL y Q^.Info X Hacer Q Q^.DER 3. Fin del ciclo del paso 2

ELIMINA UN NODO CON INFORMACIN X


4. Si Q^.Info=X entonces 4.1. Si Q=P y Q=F entonces {La lista tiene un slo nodo} Hacer P NIL y F NIL
Si no 4.1.1. Si Q=P entonces {Es el primero} Hacer P Q^.DER y P^.IZQ NIL

ELIMINA UN NODO CON INFORMACIN X


Si no 4.1.1.1. Si Q=F entonces {Es el ltimo} Hacer F Q^.IZQ y P^.DER NIL Si no Hacer T Q^.IZQ y R Q^.DER, T^.DER R y R^.IZQ T

ELIMINA UN NODO CON INFORMACIN X


4.1.1.2. Fin del condicional del paso 4.1.1.1 4.1.2. Fin del condicional del paso 4.1.1 4.2. Fin del condicional del paso 4.1 Quitar(Q) Si no Escribir El elemento X no se encuentra en la lista 5. Fin del condicional del paso 4.