semana6 listas enlazadas

29
LENGUAJE DE PROGRAMACIÓN I LISTAS ENLAZADAS Expositor: Ing. Humberto Valdera Rodríguez

Transcript of semana6 listas enlazadas

LENGUAJE DE PROGRAMACIN I

LENGUAJE DE PROGRAMACIN I

LISTAS ENLAZADASExpositor: Ing. Humberto Valdera RodrguezPUNTEROSUn puntero o apuntador es una estructura simple que almacena la direccin de memoria de la variable a la cual apunta.

Constituyen la base para la construccin de las estructuras dinmicas.

ELEMENTOS DE UNA VARIABLEToda variable tiene tres elementos principales:-El tipo de dato-El valor real almacenado en la variable (dato)-La direccin de memoria de la variable: es como la coordenada en la que se encuentra dentro de la memoria del computador, y generalmente se da en nmeros hexadecimales o binarios. Variable enteravalor real del datoDireccin de memoriax16FFF4OPERADORES DE LOS PUNTEROSPara trabajar con punteros, se utilizan dos operadores especiales, ellos son (en C++): El ampersand (&). Es un operador de direccin de la memoria. Devuelve la direccin de memoria (domicilio) donde se encuentra almacenado el valor de la variable a la cual est apuntando.

El asterisco (*). Es un operador que devuelve el valor de la variable, almacenado en una direccin de memoria. Permite acceder al contenido o al valor de la variable a la cual est apuntando Ejemplo:Significa que: p: es un puntero entero que apunta a la variable x*p= 16, se refiere al valor de la variable &p= FFF4, se refiere a la direccin de memoria.

p*p&pVariable enteravalor real del datoDireccin de memoriax16FFF4Para qu sirven los punteros? - Optimizar la memoria- Crear estructuras de datos dinmicas- Recorrer arrays-Pasarle direcciones de memoria como parmetros a las funcionesA 1012185Qu estamos haciendo aqu?, Primero, estamos reservando una zona de memoria contigua, de la siguiente manera: Direcciones de memoria1000100110021003Datos de A1012185A = 1000 LISTAS ENLAZADAS SIMPLESLas listas enlazadas simples o listas encadenadas, son estructuras de datos dinmicas, constituidas por un conjunto de elementos de datos llamados NODOS.

Los nodos estn constituidos por: - Un campo para almacenar los datos. - Un campo de enlace que indica cul es el nodo siguiente, almacena la direccin de memoria del siguiente nodo.

Representacin grfica de un nodo

REPRESENTACIN GRFICADe una lista enlaza simple con datos:

Los punteros en una lista enlazada simple, se identifican de la siguiente manera:

Donde: p = puntero auxiliar o temporal.dato(p) = B, valor del dato apuntado por p. siguiente(p) = puntero que sigue despus de p, y apunta al siguiente nodo. POSICIONES DE MEMORIALos elementos de una lista enlazada se pueden almacenar en posiciones de memoria no contiguas, porque el puntero es el que indica dnde se encuentra el elemento de la lista. Direcciones de memoria100010011002100310041005Datos de la L.E.S.A B C D primeroNULO OPERACIONES: CREAR UNA LISTA VACAAl crear una lista, sta no tiene nodo, ni elemento alguno, es decir est vaca, por lo que el puntero al cual le llamaremos primero, apunta a NULO. En grfica

En el DDF:primero = NULO

INSERTAR EN UNA LISTA VACAEl proceso es el siguiente: 1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo. En grfica:En el DDF:p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresadoEn grfica:En el DDF:

leer: dato(p)3) Preguntamos: primero = NULO? Respuesta: S - Hacer que el puntero primero, apunte al nuevo nodo. - Hacer que el puntero sig(p), apunte a NULO. En grfica:En el DDF:

primero = psig(p) = NULO4) Resultado final:

INSERTAR AL INICIO DE UNA LISTA NO VACAEl proceso es el siguiente: 1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo. En grfica:En el DDF:p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.En grfica:el DDF:leer: dato(p)

3) Preguntamos: primero = NULO?Respuesta: No- Hacer que un puntero auxiliar q, apunte al primero. - Hacer que un puntero auxiliar w, apunte a sig(q). En grfica:En el DDF:q = primerow = sig(q)

4) Preguntamos: dato(p) < dato(q)?Respuesta: S- Hacer que sig(p) apunte a primero. - Hacer que primero apunte al nuevo nodo. En grfica:En el DDF:sig(p) = primeroprimero = p

5) Resultado final:

INSERTAR AL FINAL DE LA LISTA NO VACAEl proceso es el siguiente: 1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo. En grfica:En el DDF:p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.En grfica:En el DDF:leer: dato(p)

3) Preguntamos: primero = NULO?Respuesta: No- Hacer que un puntero auxiliar q, apunte al primero. - Hacer que el puntero auxiliar w, apunte a sig(q). En grfica:En el DDF:q = primerow = sig(q)

4) Preguntamos: dato(p) < dato(q)?Respuesta: NoPreguntar: w NULO?Respuesta: SMientras es S, preguntamos: dato(p) < dato(w)?Respuesta: No - Hacer que el puntero q, apunte a w. - Hacer que el puntero w, apunte a sig(q)En grfica:En el DDF:q = ww = sig(q)

Los punteros q y w, avanzan hasta que la respuesta de la pregunta w NULO?, sea No, entonces se procede a insertar el elemento al final de la lista, de la siguiente manera: - Hacer que sig(q), apunte al nuevo nodo. - Hacer que sig(p), apunte a NULO. En grfica:En el DDF:sig(q) = psig(p) = NULO

5) Resultado final:

INSERTAR EN EL INTERMEDIO DE LA LISTAEl proceso es el siguiente: 1) Crear un nuevo nodo, haciendo que un puntero auxiliar p, apunte al nuevo nodo. En grfica:En el DDF:p = nuevo nodo

2) Ingresar el dato en el nuevo nodo, haciendo que dato(p) capture al dato ingresado.En grfica:En el DDF:leer: dato(p)

3) Preguntamos: primero = NULO?Respuesta: No- Hacer que un puntero auxiliar q, apunte al primero. - Hacer que el puntero auxiliar w, apunte a sig(q). En grfica:En el DDF:q = primerow = sig(q)

4) Preguntamos: dato(p) < dato(q)?Respuesta: NoPreguntar: w NULO?Respuesta: SMientras es S, preguntamos: dato(p) < dato(w)?Respuesta: No - Hacer que el puntero q, apunte a w. - Hacer que el puntero w, apunte a sig(q)En grfica:En el DDF:q = ww = sig(q)

Los punteros q y w, avanzan hasta que la respuesta de la pregunta dato(p) < dato(w)?, sea S, entonces se procede a insertar el elemento en el intermedio respectivo de la lista, de la siguiente manera: - Hacer que sig(p), apunte a w. - Hacer que sig(q), apunte al nuevo nodo. En grfica:En el DDF:sig(p) = wsig(q) = p

5) Resultado final:

OPERACIONES:MOSTRAR LOS ELEMENTOS DE LA LISTALos elementos se mostrarn cuando el puntero primero no sea NULO.Para lo cual hacemos que un puntero auxiliar q, apunte a primero. Con el puntero q, recorremos la lista, mostrando los datos.

Ejemplo:

q12Ejemplo:

q124Ejemplo:

q1245Ejemplo:

q1245Elabora el algoritmo para insertar elementos en una lista enlazada simple