Está en la página 1de 29

LENGUAJE DE PROGRAMACIN I

LISTAS ENLAZADAS

Expositor: Ing. Humberto Valdera Rodrguez

PUNTEROS
Un 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 VARIABLE


Toda 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 entera x valor real del dato 16 Direccin de memoria FFF4

OPERADORES DE LOS PUNTEROS


Para 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:
Variable entera x valor real del dato 16 Direccin de memoria FFF4

*p

&p

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.

Para qu sirven los punteros?


- Optimizar la memoria - Crear estructuras de datos dinmicas - Recorrer arrays -Pasarle direcciones de memoria parmetros a las funciones
A 10 12 18 5

como

Qu estamos haciendo aqu?, Primero, estamos reservando una zona de memoria contigua, de la siguiente manera:
A = 1000 Direcciones de memoria Datos de A

1000 1001 1002 1003

10

12

18

LISTAS ENLAZADAS SIMPLES


Las 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 GRFICA
De 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 MEMORIA
Los elementos de una almacenar en posiciones porque el puntero es encuentra el elemento de
primero

lista enlazada se pueden de memoria no contiguas, el que indica dnde se la lista.


NULO

Direcciones de 1000 1001 1002 1003 1004 1005 memoria Datos de la L.E.S. A B C D

OPERACIONES: CREAR UNA LISTA VACA


Al 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 VACA


El 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: 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 = p sig(p) = NULO

4) Resultado final:

INSERTAR AL INICIO DE UNA LISTA NO VACA


El 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 = primero w = 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) = primero
primero = p

5) Resultado final:

INSERTAR AL FINAL DE LA LISTA NO VACA


El 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 = primero w = sig(q)


4) Preguntamos: dato(p) < dato(q)? Respuesta: No Preguntar: w NULO? Respuesta: S Mientras 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=w w = 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) = p sig(p) = NULO

5) Resultado final:

INSERTAR EN EL INTERMEDIO DE LA LISTA


El 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 = primero w = sig(q)


4) Preguntamos: dato(p) < dato(q)? Respuesta: No Preguntar: w NULO? Respuesta: S Mientras 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=w w = 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) = w sig(q) = p

5) Resultado final:

OPERACIONES: MOSTRAR LOS ELEMENTOS DE LA LISTA


Los 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:

Ejemplo:

Ejemplo:

Ejemplo:

Elabora el algoritmo para insertar elementos en una lista enlazada simple

También podría gustarte