Computación ii 324-1-estructuras dinamicas-con enlaces

1,830 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,830
On SlideShare
0
From Embeds
0
Number of Embeds
1,279
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Computación ii 324-1-estructuras dinamicas-con enlaces

  1. 1. Computación II - 324
  2. 2. Computación II - 324C Lenguaje máquinaa t e Lenguaje Ensambladorg Bajo Nivel o r ias
  3. 3. Computación II - 324 Ca t e Alto Nivel gorias Cuarta Generación y Quinta Generación
  4. 4. Computación II - 324Programación Estructurada  Para resolver problemas de cierta envergadura se utiliza normalmente la técnica de diseño que se conoce con el nombre de diseño modular.  El problema se divide en subproblemas que se puedan resolver con un conjunto de subprogramas que tengan una cierta cohesión. Al conjunto de subprogramas que resuelve un subproblema se le llama módulo funcional. Un módulo puede hacer uso de un subprograma de otro módulo si éste aparece en su interfaz
  5. 5. Computación II - 324Programación Estructurada  Un interfaz es un conjunto de cabeceras de subprogramas que pueden ser utilizados por otros módulos. Los interfaces aparecieron para minimizar el acoplamiento entre los módulos. Se dice que es conveniente un diseño con acoplamiento débil entre módulos. La interfaz sólo tienen que aparecer los subprogramas principales del módulo y no los subprogramas que son utilizados para implementar los subprogramas principales
  6. 6. Computación II - 324Programación Estructurada  Esta descomposición se conoce con el nombre de descomposición funcional.Posteriormente aparece un nuevo tipo dedescomposición o abstracción que se conoce con elnombre de abstracción de datos
  7. 7. Computación II - 324Abstracción La técnica de la abstracción no permite accederdirectamente a la representación de la estructura.
  8. 8. Computación II - 324Abstracción  La abstracción: Separa la especificación (qué hace) de la implementación (cómo lo hace). Los usuarios de un TAD no necesitan conocer sus detalles de implementación (Cómo lo hacen). Como consecuencia, aporta las ventajas de:  Extensibilidad del código: Es posible modificar y mejorar la implementación del TAD sin afectar a los demás módulos que lo utilizan., b) Aumenta la facilidad de uso. c) Aumenta la legibilidad del código que usa el TAD.
  9. 9. Computación II - 324Manejo de memoria5 caracteres La asignación estática de memoria reserva la cantidad necesaria para almacenar los datos de cada estructura en tiempo de compilación
  10. 10. Computación II - 324Tipo de datos en Pascal Tipo Rango Espacio en memoria Char Carácter ASCII 1 byte5Byte caracteres 0 a 255 1 byte Integer -32768 a 32767 2 bytes Real 1 E -38 a 1 E+38 6 bytes Boolean True – False 1 byte Shortint -128 a 127 1 byte Word 0 a 65535 2 byte Longint -2147483648 a 4 byte 214748364 String Cadena de 255 caracteres Hasta 255 bytes
  11. 11. Computación II - 324Manejo de memoria No se almacenan en memoria estática.5• caracteres Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilación no se sabe el número de variables que serán necesarias. • Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el número de elementos que la forman no es conocido hasta que el programa se ejecuta.
  12. 12. Computación II - 324Uso de Procedimiento y funcionesParámetros Valor No devuelve valores…no antecede la palabra VAR El compilador crea una copia del dato y lo almacena en la variable parámetro que lo recibe. Dentro de la función o procedimiento se trabaja con la copia obtenida, no importando las operaciones que se realicen con la copia, la variable introducida como parámetro, no será afectada en su valor inicial al terminar el proceso. Su sintaxis es la siguiente: PROCEDURE Identificador (Ide1, Ide2: Tipo; Ide3: Tipo);
  13. 13. Computación II - 324Ejemploprogram Ejemplo;uses crt; BEGINvar nombre:string; clrscr; (* cargando variable *) nombre:=juan fernando;Procedure pasar(nombre1:string); pasar(nombre); (* desplegando *) writeln(nombre : ,nombre);begin (* cambiando parametro *) readln; END.nombre1:=maria elena;end; Valor de la variable nombre en el Procedimiento Pasar ? Valor de la variable nombre en el Programa Principal?
  14. 14. Computación II - 324Parámetro Por Referencia Se reciben/envían con la palabra clave VAR. Se trabaja en la misma posición de memoria de lavariable original, es decir, se referencian. Cualquier cambio que se realice a la variable parámetro,en el procedimiento o función también se le estará haciendoa la variable original. PROCEDURE Identificador (VAR Ide1: Tipo);
  15. 15. Computación II - 324Ejemplo BEGINprogram Ejemplo; clrscr; (* cargando variable *) nombre:=juan fernando;uses crt; Edad:= 30;var nombre:string; edad:integer; (* mandando a procedimiento *)procedure pasar(nombre1:string; pasar(nombre,edad); (* desplegando *) var edad1:integer); writeln(nombre : ,nombre);begin (* cambiando parametro *) writeln(‘edad : ,edad);nombre1:=maria elena; readln; END.edad1:=50;end; Valor de la variables nombre y edad? http://www.pcg.ull.es/edapplets/DataControlJApplet/pasoparametros.html
  16. 16. Computación II - 324Punteros en Pascal. Es una variable cuyo valor es una dirección de memoria donde se encuentra la variable dinámica apuntada
  17. 17. sComputación II - 324Punteros en Pascal. En PASCAL los punteros se declaran con el símbolo ^. Declarar las variables tipo puntero que sean necesarias (Dentro de la sección VAR).
  18. 18. Computación II - 324Se pueden definir tipos punteros o definir variables de tipopuntero:Type ptr = ^integer;Var p: ptr; q: ^real;Ejemplo p^:= 5 . Asigno el valor 5 a la variable apuntada por p. writeln(p^). Imprime el valor de la variable apuntada por p.
  19. 19. sComputación II - 324Creación y destrucción de variables dinámicasEl Procedimiento NEW(), asigna memoria a la variable puntero, encaso de que el PC no obtenga memoria para alocar el pedido, alpuntero se le asignara la dirección NIL, cuyo significado es "nada", esdecir el puntero no apunta a ningún sector de la memoria.El Procedimiento DISPOSE(), Libera memoria reservada por a lavariable puntero mediante el procedimiento DISPOSE()
  20. 20. Computación II - 324 Ejemplo.New (puntero). Asigna memoria a la variable apuntada por puntero.Gráficamente.
  21. 21. Computación II - 324Ejemplo.Representación Gráfica.
  22. 22. Computación II - 324 Tipo de dato Tipo de datoDiagrama sintáctico. puntero. de dato Contiene una predefinido dirección de en pascal memoria
  23. 23. Computación II - 324 Ejemplo.Dispose (puntero). Libera la memoria asociada a la variable referida (la que contiene el dato). Deja indefinido el puntero.Gráficamente.
  24. 24. Computación II - 324Ejemplo.Type Puntx=^Real;Var P:Puntx; <apunta a direcciones de memoria que contienen valores de tipo real.>Estas declaraciones aún no crean nada en memoria hasta cuando elprograma se ejecute el procedimiento NEW.NEW(P) , genera lo siguiente en memoria. P^ P--
  25. 25. Computación II - 324Puntero. NEW(P) , genera lo siguiente en memoria. Una celda vacía apuntada por P y contendrá valor real. P^ P-- P^:= 355 <asigna el valor 355 en la celda de memoria apuntada por P^. 355 P--
  26. 26. Computación II - 324TYPE TApcar=^char;VAR Apcar:TApcar;BEGIN New(Apcar); Readln(Apcar^); Apcar^:= Pred(Apcar^);END.
  27. 27. Computación II - 324Operaciones con Puntero.Las operaciones permitidas para esta nueva variables son: Asignación Lectura Escritura Todas las operaciones legales que se puedan realizar con dichotipo declarado (entero, string, char, etc).
  28. 28. Computación II - 324Operaciones con Punteros (^).Ejemplos. Asignación: Los cambios que se efectúen con la variable Apnum1 o la Variable Apnum2 afectan a ambas, son indistintas. El espacio en memoria que se reservo con la variable Apnum1 Sigue ocupado en memoria, lo conveniente es liberar este Espacio antes de realizar la asignación.
  29. 29. Computación II - 324TYPE TApnum=^integer;VAR Apnum1,Apnum2:TApnum;BEGIN New(Apnum1);New(Apnum2); { inst. 1} Apnum1^:=2;Apnum2^:=4; {inst. 2} Apnum2^:=Apnum1^ + Apnum2^; {inst. 3} Apnum1^:=Apnum2^ DIV 2 ; {inst. 4}END.
  30. 30. Computación II - 324New(Apnum1);New(Apnum2); { inst. 1} Apnum1 Apnum2 Apnum1^:=2;Apnum2^:=4; {inst. 2} 2 4 Apnum1 Apnum2
  31. 31. Computación II - 324Apnum2^:=Apnum1^ + Apnum2^; {inst. 3} 6 Apnum2Apnum1^:=Apnum2^ DIV 2 ; {inst. 4} 3 Apnum1
  32. 32. Computación II - 324Operaciones con Punteros (^).Ejemplos. Comparación: Apnum1= Apnum2 La Comparación resulta con un valor TRUE, ya que Apnum1 y Apnum2 contienen direcciones de memoria diferentes.
  33. 33. Computación II - 324Operaciones con Punteros (^).Ejemplos. Asignación: Apnum1: = Apnum2
  34. 34. Computación II - 324Operaciones con Punteros (^). • Comparación: Se comparan las direcciones, no los Contenidos de los datos apuntados o referenciados. Apnum1=Apunum2 { Apnum1,Apnum2 son datos tipo ^}. • Asignación: Se asignan las direcciones entre sí, no el contenido de los datos apuntados . Apnum1:= Apnum2 { Apnum1 y Apnum2 tienen la misma dirección por lo tanto apuntan al mismo dato.}.
  35. 35. Computación II - 324Valor Nil .Palabra reservada en el Lenguaje Pascal.Es un valor que puede asignarse solo a las variables punteroe indica que no están apuntando a ningún valor .Nil puede ser utilizado por cualquier puntero, es decir,independiente del tipo de dato referenciado (apuntado) por lavariable tipo puntero.EjemploApnum1:= nil
  36. 36. Computación II - 324Otras Estructuras de Datos… Lineales: Listas enlazadas, Listas Doblemente enlazada, Pilas, Colas. No lineales: árboles , grafos.
  37. 37. Computación II - 324Nodos. Es una estructura creada por el programador, para poder crear otras estructuras tales cómo Listas o Colas en memoria dinámica. Un nodo posee un puntero que permite almacenar una dirección de otro nodo; es decir permite enlazar múltiples nodos entre sí y hacer nuestras estructuras más complejas y alocarlas en memoria dinámica.
  38. 38. Computación II - 324 Nodo. Ejemplo. Definición de un nodo. TYPE TipoLista =^ TipoNodo; TipoNodo = Record Info:TipoInfo; Siguiente:TipoLista END; Se declara un tipo de puntero llamado TipoLista que apunta a un registro TipoNodo. Donde TipoNodo esta definido como un registro que almacenará información y un campo siguiente. Siguiente es un puntero a un tipo de dato TipoLista. Esta forma de definición recursiva nos permite construir los nodos.
  39. 39. Computación II - 324Listas Enlazadas. Es un conjunto de elementos llamados nodos en los que cada uno de ellos contiene un dato y también la dirección del siguiente nodo. Cada nodo apunta al siguiente nodo, excepto el último nodo que apunta a NIL. Esto indica que cada nodo ocupa posiciones no contiguas en memoria. El orden de los mismos se establece mediante punteros.
  40. 40. Computación II - 324Declaración de una estructura de nodos. Definición de estructura recursiva de nodos
  41. 41. Computación II - 324Característica de las listas Una Lista enlazada requiere, como minímo de una refrencia al primer nodo Una lista vacía el primer nodo apunta a null Estructura recursiva de nodos Operaciones básicas con listas Crear Lista Recorrer lista Inserta un elemento (inicio-final-una posición dada) Borrar un elemento Búsqueda de un elemento<<En estas operaciones es fundamental el movimientos de los punteros>>
  42. 42. Computación II - 324Operaciones con Listas enlazadas Para acceder al primer nodo de una lista es necesario el uso de un puntero externo y posteriormente se continua con siguiendo la cadena de puntero. (Puntero Externo)Punteros enlazando al siguiente nodo Puntero del último nodo apunta a nil
  43. 43. Computación II - 324Operaciones Con listas enlazadas Cualquier operación con cualquier tipo de lista implica redireccionar los punteros de los nodos involucrados o afectados por la operación.Para la operación de inserción se debe determinar ellugar dentro de la lista.
  44. 44. Computación II - 324Operación Inserción un elemento en una listaEsta operación consiste en agregar un nuevo nodoa la lista. Se considerar tres casos:Insertar un nodo al inicio.Insertar un nodo antes o después de cierto nodo.Insertar un nodo al final
  45. 45. Computación II - 324Operación Inserción un elemento en una listaPara la inserción es la creación de nodo, determinar el lugar dentro dela lista y realizar el movientos de punteros requerido.En el ejemplo anterior, observamos un nuevo nodo denominado tmp (alque se asigna un valor x en el campo icorrespondiente a datos), el cual vaser insertado en la posición posterior dada (apuntada por el nodo actual).Observamos que para incluirlo en la lista, el apuntador siguiente de tmp,lo movemos al la misma dirección que apunta el nodo actual y la posiciónsiguiente del nodo actual se mueve al nodo tmp.
  46. 46. Computación II - 324Operación eliminar elemento en una listaLa operación consiste en eliminar un nodo de lalista, redefiniendo las punteros que correspondan.Se pueden presentar cuatro casos:Eliminar el primer nodo.Eliminar el último nodoEliminar un nodo con cierta información.Eliminar el nodo anterior o posterior al nodocierta con información.
  47. 47. Computación II - 324Operación eliminar elemento en una listaEsta operación consiste en un simple cambio de unareferencia.En el dibujo para eliminar el nodo con contenido x,hacemos que la referencia siguiente del nodo actual apunteapunte al nodo b. Con eso queda alislado el nodo b.
  48. 48. Computación II - 324Búsqueda de un elemento en una listaEsta operación consiste en visitar cada uno de losnodos, tomando al campo siguiente como punteroal siguiente nodo a visitar.Listas especiales con nodo cabeceraUna lista enlazada con cabecera es una lista enlazada quecontiene un nodo especial, llamado nodo cabecera, alprincipio de la lista.
  49. 49. Computación II - 324Listas especiales con nodo cabeceraLa eliminación del primer nodo se convierte en un casoespecial al igual que la inserción en la primera posición de lalista, en este caso las operaciones se restringen a aquellasposiciones posteriores a alguna otra.La eliminación e insersición al comienzo de la lista sonalgoritmos especiales y en todo caso engorroso
  50. 50. Computación II - 324Búsqueda de un elemento en una listaEsta operación consiste en visitar cada uno de losnodos, tomando al campo siguiente como punteroal siguiente nodo a visitar. <<Análisis de ejercicio lista .pas>>
  51. 51. Computación II - 324Listas DoblesEs una colección de nodos, donde cada nodo tienedos punteros, uno de ellos apuntando a supredecesor (li) y otro a su sucesor(ld).Estructura de un nodo: PI DATO PD
  52. 52. Computación II - 324Tipos Listas DoblesListas dobles lineales.En este tipo de lista doble, tanto el punteroizquierdo del primer nodo como el derechodel último nodo apuntan a NIL. Se puede recorrer una serie de nodos donde desde cualquier nodo excepto el último y el primero. Se puede viajar al nodo anterior o al siguiente utilizando dos punteros llamados P_prox y P_ant.
  53. 53. Computación II - 324 Tipos Listas DoblesListas dobles circulares.En este tipo el puntero izquierdo del primer nodoapunta al último nodo de la lista, y el punteroderecho del último nodo apunta al primer nodo dela lista.
  54. 54. Computación II - 324Pilas.Tipo especial de lista lineal en la cual un elemento sólo puede serañadido o eliminado por un extremo llamado cima.Esto significa que los elementos se sacan de la pila en ordeninverso al que se pusieron en ella.LIFO (LAST IN- FIRST OUT). Primero que entra último que sale.
  55. 55. Computación II - 324Pila: caso particular de una lista enlazadaLa imagen muestra como quedaría una pila de enteros al agregarle unvalor 3, luego un 2 y luego un 1. <<Analizar ejercicio de pila>>
  56. 56. Computación II - 324 ColasUna cola es una lista en las que las supresiones se realizansolamente solamente al principio de la lista y las inserciones al finalde la misma. Son conocidas como listas FIFO (First In, First Out: El primero enentrar es el primero en salir). Los elementos se almacenan enfila, pero sólo pueden añadirse por un extremo y leerse por elotro. Analizar ejercicio de cola
  57. 57. Computación II - 324Cola
  58. 58. Computación II - 324RecursividadEs una herramienta de programación utilizada para resolverproblemas que al subdividirlos en subproblemas presentan lamisma estructura. Casos Típicos definir objetos en sí mismo ejemplo árboles, colas,listas, listas enlazadas.Un programa que se llame a sí mismo se dice que es recursivo
  59. 59. Computación II - 324Tipos de RecursividadDirecta e indirectaDiseño de la RecursividadEstado básico: Es el estado en el cual la solución no se presentade manera recursiva sino directamente.Estado General: Se debe poder resolverse en función del casobase y un caso general de menor tamaño (que progrese hacia unasolución más sencilla, hacia el caso base)
  60. 60. Computación II - 324Desventajas de la Recursividad No es más rápida que la iteración (ya que implica guardar entornos). Consume muchos recursos (memoria)Funcionamiento de la RecursividadEs necesario guardar el estado de cada programa antes de cadallamada (variables locales, parámetros y punto de ejecución) para quesepa seguir después de la llamada.
  61. 61. Computación II - 324Análisis del cálculo del factorial de un númeroprogram factorial; program FactorialNum;uses crt; var num:integer;var function factorial(n:integer):integer;n,i,mul:integer; begin if (n > 1) thenbegin factorial:= n * factorial(n-1)mul:=1; else factorial:=1;i:=1; end; beginwriteln (‘Numero a sacarle el factorial); write( Ingrese el valor de n: );readln (n); readln(num); writeln( El resultado es:repeat ,factorial(num)); readln;mul:=mul*i; end.i:=i+1;until (i>n);writeln (el factorial es ,mul); Realice la corrida de cada unoreadln;end.

×