Professional Documents
Culture Documents
LISTAS
INTRODUCCION
Los arreglos, pilas y colas son estructura de datos estticas, porque durante el tiempo de compilacin se asigna espacio en la memoria, permaneciendo inalterable a lo largo de la ejecucin del programa. En esta unidad veremos estructuras de datos dinmicas. Estos se generan a partir de un elemento conocido como Puntero o Referencia. Por lo tanto hay que distinguir la variable que apunta, la variable
MANEJANDO PUNTEROS
Se usar la notacin: P = ^D Nos indica que P es un puntero al tipo de dato D Se usar Crea(P), para indicar asignacin en memoria. Se usar Quita (P), para liberar el espacio en memoria dinamicamente. La principal ventaja es que se puede asignar o liberar espacio en memoria en tiempo de ejecucin cuando se requiera. Solucionando el problema de Cul es el espacio optimo?. Se usar la palabra NILL para indicar un
Variables P = ^Cadena
una cadena}
Ejemplo
{declarando un puntero a
Nombre = cadena {varible estandart } Inicio Crea(P) {asignando en memoria} P= ^nombre {enlace a la variable} Imprimir P^ {Despliega el contenido a puntado} Imprimir P {despliega la direccin de memoria} QUITA(P) {libera el espacio en memoria} Fin
Concepto de Lista
Coleccin de elementos llamados generalmente nodos. El orden de los nodos se establece mediante punteros, es decir referencias o direcciones a otrosUN NODO ESTRUCTURA DE nodos.
INFORMACION LIGA Enlace a oto nodo de la Lista, si fuera el ultimo Elemento su valor seria NILL o NULL
Dato almacenado en la lista Al relacionarse con punteros los nodos, no es necesario Almacenarlos en forma continua.
CREAINICIO(P) 1. CREA(P) 2. LEER P^.INFORMACION 3.- P^.LIGA = NILL 4.- REPETIR CREAR(Q) LEER Q^.INFORMACION Q^.LIGA = P P=Q 5.- HASTA QUE NO H AY INFORMACION
P GARCIA
INSERCION INVERSA
P
nill Q PEREZ P GARCIA nill b) Al insertar el segundo nodo PEREZ P LOPEZ PEREZ GARCIA nill
SANTOS
LOPEZ
PEREZ
GARCIA nill
CREAFINAL(P) 1. CREA(P) 2. LEER P^.INFORMACION 3.- P^.LIGA = NILL Y T= P 4.- REPETIR CREAR(Q) LEER Q^.INFORMACION Q^.LIGA = NILL T^.LIGA=Q T= Q 5.- HASTA QUE NO H AY INFORMACION
P=T GARCIA
INSERCION CORRECTA
P=T
nill T GARCIA nill PEREZ
nill
b) Al insertar el segundo nodo PEREZ T PEREZ nill T LOPEZ nill T SANTOS nill nill Q Q
GARCIA
GARCIA
PEREZ
LOPEZ
Consiste en visitar cada uno de los nodos que forman parte de la lista, la visita se puede definir como una operacin simple, como puede ser una impresin, actualizacin, etc. 1. 1. Q=P 2. REPETIR MIENTRAS Q<> NILL 3. ESCRIBIR Q^.INFORMACION 4. Q= Q^.LIGA 5. FIN_CICLO
INSERCION DE UN ELEMENTO Consiste en agregar un nuevo nodo a las lista, se partir de la suposicin que la lista ya existe (omitiendo la lista vaca) Se presenta de las siguientes formas
1. Insertar un nodo al inicio de la lista 2. Insertar un nodo al final de la
1. 2. 3. 4.
Ejemplo grfico.
P Q
DATO nill
Ejemplo grfico.
T
Q
DATO nill
SI Q^.LIGA<> NILL ENTONCES T=Q, Q=Q^.LIGA SI_NO BAND= FALSE FIN_CONDICIONAL FIN_CICLO SI BAND= TRUE ENTONCES CREAR(X) ; X^.INFORMACION=DATO SI P=Q ENTONCES X^.LIGA=P, P=X SI_NO T^.LIGA=X y X^.LIGA=Q FIN_CONDICIONAL FIN_CONDICIONAL
BORRADO DE UN ELEMENTO
Consiste en quitar un nodo de la lista, redefiniendo las ligas correspondientes. Se puede presentar cuatro casos en esta operacin: 1. Eliminar el primer nodo 2. Eliminar el ltimo nodo 3. Eliminar un nodo con informacin X 4. Eliminar el nodo anterior/posterior al nodo con informacin X
1. 2. 3. 4. 5. 6. 7.
Q=P Si Q^.liga <>nill {se verifica si la lista tiene un solo nodo} entonces P=Q^.LIGA {se redefine el puntero al inicio} SI_NO P=NILL QUITA(Q)
P P
nill
nill
nill
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Q
X
NILL
Q
X
NILL
BUSQUEDA DE UN ELEMENTOEN LISTA DESORDENADA 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Q=P y BAND= TRUE REPETIR MIENTRAS (Q^.INFORMACION <> X) y (BAND = TRUE) SI Q^.LIGA <> NILL ENTONCES Q=Q^.LIGA SI_NO BAND= FALSO FIN_CONDICIONAL FIN_CICLO SI BAND= FALSO ENTONCES ESCRIBIR ELEMENTO NO FUE ENCONTRADO SI_NO ESCRIBIR EL ELEMENTO ESTA EN LA LISTA FIN_CONDICIONAL
BUSQUEDA DE UN ELEMENTO EN LISTA ORDENADA 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Q=P y BAND= TRUE REPETIR MIENTRAS (Q^.INFORMACION < X) y (BAND = TRUE) SI Q^.LIGA <> NILL ENTONCES Q=Q^.LIGA SI_NO BAND= FALSO FIN_CONDICIONAL FIN_CICLO SI Q^.LIGA =X ENTONCES ESCRIBIR EL ELEMENTO ESTA EN LA LISTA SI_NO ESCRIBIR EL ELEMENTO NO FUE ENCONTRADO FIN_CONDICIONAL
LISTAS CIRCULARES
Tienen las caractersticas de que el ltimo nodo apunta al primero
P
GARCIA
PEREZ
LOPEZ
SANT OS
Al implementar el recorrido en listas circulares es necesario definir un NODO CABECERA para no caer en una operacin cclica. Este contendr
GARCIA
PEREZ
LOPEZ
SANT OS
EJEMPLO
GARCIA PEREZ LOPEZ SANTOS
NILL
NILL
1. 2. 3. 4. 5. 6.
EJEMPLO
1. 2. 3. 4. 5. 6.
INSERTAR AL FINAL
EJEMPLO
EJEMPLO
P T Q F
1. 2. 3. 4. 5. 6. 7. 8.
Q=P SI Q^.LIGADER<>NILL ENTONCES P=Q^.LIGDER y P^.LIGAIZQ=NILL SI_NO P=NILL y F=NILL FIN_CONDICIONAL QUITA(Q)
Q P P F
NILL
NILL NILL
NILL NILL
NILL
X NILL NILL
C) CUANDO EL NODO ES INTERMEDIO
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
X NILL NILL
P ( X ) = 3 x + 0. 5 x + 6 X 4
4 3
3 4
0.5 3
6 1
-4 0 nill
Representacin de polinomios